using Dapper; using DataControlMod.Common; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using PullChargeData.Helper; using System.Data; using static System.Net.Mime.MediaTypeNames; using System.Text; using DataControlMod.Entity; namespace DataControlMod.Controllers { [ApiController] [Route("newOpenApi/[action]")] public class InputDataModifyController:ControllerBase { private readonly ILogger _logger; private readonly IHttpClientFactory _httpClientFactory; public InputDataModifyController(ILogger logger, IHttpClientFactory httpClientFactory) { _logger = logger; _httpClientFactory = httpClientFactory; } [HttpPost] public async Task DataChange([FromHeader] string token, dynamic inputData) { //获取用户查询数据权限 var inputObj = JsonConvert.DeserializeObject(inputData.ToString()); var user_id = inputObj.user_id; var auth_id = inputObj.auth_id; using (IDbConnection conn = DapperHelper.MySqlConnection()) { string sql = $@"SELECT ur.user_id, group_concat(rad.new_col_condition SEPARATOR ' and ') as new_col_condition, group_concat(rad.edit_row_condition SEPARATOR ' and ') as edit_row_condition, group_concat(rad.edit_col_condition SEPARATOR ' and ') as edit_col_condition, group_concat(rad.delete_row_condition SEPARATOR ' and ') as delete_row_condition FROM t_user_role ur, t_auth auth, t_role_auth ra LEFT JOIN t_role_auth_data rad on rad.role_id = ra.role_id and rad.auth_id = ra.auth_id WHERE ur.role_id = ra.role_id AND ra.auth_id = auth.auth_id AND ur.user_id = @user_id AND (not isnull(query_row_condition) or not isnull(query_col_conditon)) AND auth.auth_id = @auth_id"; var dynamicParams = new DynamicParameters(); dynamicParams.Add("user_id", user_id.ToString()); dynamicParams.Add("auth_id", auth_id.ToString()); var result = conn.Query(sql, dynamicParams).FirstOrDefault(); if (result.user_id != null) { var dataContent = inputObj.dataContent; var eventVal = inputObj["event"].ToString(); var queryCol = result.query_col_condition == null ? null : result.query_col_condition.ToString(); string[] queryColArr = queryCol.Split(","); List queryColList = queryColArr.Cast().ToList(); var queryRow = result.query_row_condition == null ? null : result.query_row_condition.ToString(); string[] queryRowArr = queryRow.Split(" and "); List queryRowListTmp = queryRowArr.Cast().ToList(); var queryRowList = new Dictionary(); foreach (var item in queryRowListTmp) { queryRowList.Add(item.Split("=")[0], item.Split("=")[1]); } var removeList = new List(); var filterItem = new List(); if (eventVal == "1") { if (!string.IsNullOrEmpty(queryCol)) { foreach (var item in dataContent) { foreach(var itemChild in item) { var tmp = queryColList.Exists(col => col == itemChild.Name); if (!tmp) { removeList.Add(itemChild.Name); } } foreach(var itemName in removeList) { item.Remove(itemName); } } } } else if(eventVal == "2") { if (!string.IsNullOrEmpty(queryCol)) { foreach (var item in dataContent) { foreach (var itemChild in item) { var tmp = queryColList.Exists(col => col == itemChild.Name); if (!tmp) { removeList.Add(itemChild.Name); } } foreach (var itemName in removeList) { item.Remove(itemName); } } } if (!string.IsNullOrEmpty(queryRow)) { foreach (var item in dataContent.filter) { foreach (var queryItem in queryRowList) { var queryKey = queryItem.Key; var newFilter = new filterEntity(); newFilter.left = "("; newFilter.right = ")"; newFilter.connector = "and"; newFilter.comparator = "="; newFilter.column = queryItem.Key; newFilter.value = queryItem.Value; filterItem.Add(JsonConvert.DeserializeObject(JsonConvert.SerializeObject(newFilter))); } } } dataContent.filter.AddRange(filterItem); } else if(eventVal == "3") { if (!string.IsNullOrEmpty(queryRow)) { foreach (var item in dataContent.filter) { foreach (var queryItem in queryRowList) { var queryKey = queryItem.Key; var newFilter = new filterEntity(); newFilter.left = "("; newFilter.right = ")"; newFilter.connector = "and"; newFilter.comparator = "="; newFilter.column = queryItem.Key; newFilter.value = queryItem.Value; filterItem.Add(JsonConvert.DeserializeObject(JsonConvert.SerializeObject(newFilter))); } } } dataContent.filter.AddRange(filterItem); } } //读取底座接口配置 var uri_db2 = AppSettingsHelper.App("DB2", "set1"); var method_db2 = AppSettingsHelper.App("DB2", "set1_datachange_method"); //配置httpClient请求底座接口 HttpClient httpClient = _httpClientFactory.CreateClient(); httpClient.BaseAddress = new Uri(uri_db2); var inputBody = new StringContent(JsonConvert.SerializeObject(inputObj), Encoding.UTF8, Application.Json); var httpResponseMessage = await httpClient.PostAsync(method_db2, inputBody); //处理返回值 httpResponseMessage.EnsureSuccessStatusCode(); var rtnStr = await httpResponseMessage.Content.ReadAsStringAsync(); var rtnObj = JsonConvert.DeserializeObject(rtnStr.ToString()); return rtnObj; } } } }