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
}
}