using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; using System.Threading.Tasks; using CoreEntity.Entity; using JCSoft.WX.Framework.Api; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Caching.Memory; using Newtonsoft.Json; using PublicLibrary.Model; using SupplierWeb.Commonss; namespace SupplierWeb.Controllers { [Route("web/ES_Member")] public class ES_MemberController : BaseController { public ES_MemberController(IMemoryCache cache, IApiClient client) : base(cache, client) { } public IActionResult Index() { return View(); } /// /// 会员中心列表 /// /// /// /// [HttpPost] [Route("index")] public ActionResult index([FromBody]dynamic data, QueryFilter[] filters) { int start = 0; string field = ""; string fieldvalue = ""; if (data != null) { if (data.pageIndex == 1) { start = 0; } else { start = ((data.pageIndex - 1) * data.pageSize) + 1; } if (data.filters.Count != 0) { field = data.filters[0].field; fieldvalue = data.filters[0].value; data = new { query = "select * from mem_memberbase_p where " + field + " like '%" + fieldvalue + "%' limit " + data.pageSize }; } else { data = new { query = "select * from mem_memberbase_p a limit " + data.pageSize }; } } //将参数转换成JSON数据 var json = JsonConvert.SerializeObject(data); //通过传来的SQL语句,转换成DSL语句 string sql = Util.ElasticCall("http://192.168.50.32:9200/_xpack/sql/translate?format=json", "POST", json); string from = "\"from\":" + start + ","; sql = sql.Insert(1, from); //通过转换的DSL语句,获取数据 var str = Util.ElasticCall("http://192.168.50.32:9200/mem_memberbase_p/_search?format=json", "POST", sql); //JSON转Root对象 Root stobj = FromJSON(str); //将Root对象中的子对象取出来 List<_source> _source = new List<_source>(); _source = stobj.hits.hits.Select(x => x._source).ToList(); List Fields = new List(); Fields = stobj.hits.hits.Select(x => x.fields).ToList(); //给filed额外的属性赋值 stobj.hits.hits.ForEach(x => { x.fields._id = x._id; }); //总数 long totalcount = 0; data = new { query = "select count(1) from mem_memberbase_p" }; var jsons = JsonConvert.SerializeObject(data); string obj = Util.ElasticCall("http://192.168.50.32:9200/_xpack/sql?format=json", "POST", jsons); Num num = FromJSON(obj); totalcount =num.rows[0][0]; var jsonData = JsonConvert.SerializeObject(Fields); return Json( new { items = JsonConvert.DeserializeObject(jsonData), totalCount = totalcount }); } /// /// JSON转对象 /// /// /// /// public static T FromJSON(string input) { try { return JsonConvert.DeserializeObject(input); } catch (Exception ex) { string a = ex.Message; return default(T); } } #region 实体类 public class ColumnsItem { /// /// /// public string name { get; set; } /// /// /// public string type { get; set; } } public class Num { /// /// /// public List columns { get; set; } /// /// /// public List> rows { get; set; } } public class _shards { /// /// /// public int total { get; set; } /// /// /// public int successful { get; set; } /// /// /// public int skipped { get; set; } /// /// /// public int failed { get; set; } } public class Total { /// /// /// public int value { get; set; } /// /// /// public string relation { get; set; } } public class _source { } public class Fields { /// /// /// public List OriginType { get; set; } public string _id { get; set; } } public class HitsItem { /// /// /// public string _index { get; set; } /// /// /// public string _type { get; set; } /// /// /// public string _id { get; set; } /// /// /// public string _score { get; set; } /// /// /// public _source _source { get; set; } /// /// /// public Fields fields { get; set; } /// /// /// public List sort { get; set; } } public class Hits { /// /// /// public Total total { get; set; } /// /// /// public string max_score { get; set; } /// /// /// public List hits { get; set; } } public class Root { /// /// /// public int took { get; set; } /// /// /// public string timed_out { get; set; } /// /// /// public _shards _shards { get; set; } /// /// /// public Hits hits { get; set; } } #endregion } }