InputDataModifyController.cs 8.7 KB

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