OutputDataModifyController.cs 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. using Dapper;
  2. using DataControlMod.Common;
  3. using DataControlMod.Entity;
  4. using Microsoft.AspNetCore.Mvc;
  5. using Microsoft.Net.Http.Headers;
  6. using MySqlX.XDevAPI.Common;
  7. using Newtonsoft.Json;
  8. using Newtonsoft.Json.Linq;
  9. using PullChargeData.Helper;
  10. using System.Data;
  11. using System.Net.Http;
  12. using System.Text;
  13. using System.Linq;
  14. using static System.Net.Mime.MediaTypeNames;
  15. namespace DataControlMod.Controllers
  16. {
  17. [ApiController]
  18. [Route("newOpenApi/[action]")]
  19. public class OutputDataModifyController : ControllerBase
  20. {
  21. private readonly ILogger<OutputDataModifyController> _logger;
  22. private readonly IHttpClientFactory _httpClientFactory;
  23. public OutputDataModifyController(ILogger<OutputDataModifyController> logger, IHttpClientFactory httpClientFactory)
  24. {
  25. _logger = logger;
  26. _httpClientFactory = httpClientFactory;
  27. }
  28. [HttpPost]
  29. public async Task<JObject> search([FromHeader] string token, dynamic inputData)
  30. {
  31. //读取底座接口配置
  32. var uri_db2 = AppSettingsHelper.App("DB2", "set1");
  33. var method_db2 = AppSettingsHelper.App("DB2", "set1_query_method");
  34. //配置httpClient请求底座接口
  35. HttpClient httpClient = _httpClientFactory.CreateClient();
  36. httpClient.BaseAddress = new Uri(uri_db2);
  37. var inputBody = new StringContent(inputData.ToString(),Encoding.UTF8,Application.Json);
  38. var httpResponseMessage = await httpClient.PostAsync(method_db2, inputBody);
  39. //处理返回值
  40. httpResponseMessage.EnsureSuccessStatusCode();
  41. var rtnStr = await httpResponseMessage.Content.ReadAsStringAsync();
  42. var rtnObj = JsonConvert.DeserializeObject<dynamic>(rtnStr.ToString());
  43. //获取用户查询数据权限
  44. var inputObj = JsonConvert.DeserializeObject(inputData.ToString());
  45. var user_id = inputObj.user_id;
  46. var auth_id = inputObj.auth_id;
  47. using (IDbConnection conn = DapperHelper.MySqlConnection())
  48. {
  49. string sql = $@"SELECT
  50. ur.user_id,
  51. group_concat(rad.query_row_condition SEPARATOR ' and ') as query_row_condition,
  52. group_concat(rad.query_col_conditon SEPARATOR ' and ') as query_col_condition,
  53. group_concat(rad.new_col_condition SEPARATOR ' and ') as new_col_condition,
  54. group_concat(rad.edit_row_condition SEPARATOR ' and ') as edit_row_condition,
  55. group_concat(rad.edit_col_condition SEPARATOR ' and ') as edit_col_condition,
  56. group_concat(rad.delete_row_condition SEPARATOR ' and ') as delete_row_condition
  57. FROM
  58. t_user_role ur,
  59. t_auth auth,
  60. t_role_auth ra
  61. LEFT JOIN t_role_auth_data rad on rad.role_id = ra.role_id and rad.auth_id = ra.auth_id
  62. WHERE
  63. ur.role_id = ra.role_id
  64. AND ra.auth_id = auth.auth_id
  65. AND ur.user_id = @user_id
  66. AND (not isnull(query_row_condition) or not isnull(query_col_conditon))
  67. AND auth.auth_id = @auth_id";
  68. var dynamicParams = new DynamicParameters();
  69. dynamicParams.Add("user_id", user_id.ToString());
  70. dynamicParams.Add("auth_id", auth_id.ToString());
  71. var result = conn.Query(sql, dynamicParams).FirstOrDefault();
  72. if (result.user_id != null)
  73. {
  74. var queryRow = result.query_row_condition == null ? null : result.query_row_condition.ToString();
  75. string[] queryRowArr = queryRow.Split(" and ");
  76. List<string> queryRowListTmp = queryRowArr.Cast<string>().ToList();
  77. var queryRowList = new Dictionary<string, dynamic>();
  78. foreach(var item in queryRowListTmp) {
  79. queryRowList.Add(item.Split("=")[0], item.Split("=")[1]);
  80. //if (item.IndexOf(">=") >= 0)
  81. //{
  82. // queryRowList.Add(item.Split(">=")[0], item.Split(">=")[1]);
  83. //}
  84. //else if(item.IndexOf("=") >= 0){
  85. // queryRowList.Add(item.Split("=")[0], item.Split("=")[1]);
  86. //}
  87. }
  88. //var queryT = queryRow.Replace(" and ", ",");
  89. var queryCol = result.query_col_condition == null ? null : result.query_col_condition.ToString();
  90. string[] queryColArr = queryCol.Split(",");
  91. List<string> queryColList = queryColArr.Cast<string>().ToList();
  92. //根据用户数据权限过滤已获取的数据
  93. var removeList = new List<string>();
  94. var removeItem = new List<JObject>();
  95. foreach (var item in rtnObj.returnData.listValues)
  96. {
  97. if (!string.IsNullOrEmpty(queryRow))
  98. {
  99. foreach(var queryItem in queryRowList)
  100. {
  101. var queryKey = queryItem.Key;
  102. var queryValue = queryItem.Value.ToString().Replace("'","");
  103. if (item[queryKey] != queryValue)
  104. {
  105. removeItem.Add(item);
  106. }
  107. }
  108. }
  109. }
  110. foreach(var remove in removeItem)
  111. {
  112. rtnObj.returnData.listValues.Remove(remove);
  113. }
  114. foreach (var item in rtnObj.returnData.listValues)
  115. {
  116. if (!string.IsNullOrEmpty(queryCol))
  117. {
  118. foreach (var itemChild in item)
  119. {
  120. var tmp = queryColList.Exists(col => col == itemChild.Name);
  121. if (!tmp)
  122. {
  123. removeList.Add(itemChild.Name);
  124. }
  125. }
  126. foreach (var itemName in removeList)
  127. {
  128. item.Remove(itemName);
  129. }
  130. var ttt = item;
  131. }
  132. }
  133. }
  134. return rtnObj;
  135. }
  136. }
  137. }
  138. }