using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Threading.Tasks;
using CoreEntity.DAL;
using CoreEntity.Entity;
using CoreEntity.ESEntity;
using Elasticsearch.Net;
using JCSoft.WX.Framework.Api;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Caching.Memory;
using Nest;
using Newtonsoft.Json;
using PublicLibrary.Model;
using SupplierWeb.Commonss;
using SupplierWeb.Service;
namespace SupplierWeb.Controllers
{
[Route("web/Mem_memberinformation")]
public class Mem_memberinformationController : BaseController
{
public Mem_memberinformationController(IMemoryCache cache, IApiClient client,
IEsClientProvider clientProvider) : base(cache, client, clientProvider)
{
}
public IActionResult Index()
{
return View();
}
///
/// 会员中心列表
///
///
///
///
[HttpPost]
[Route("index")]
public ActionResult index([FromBody]dynamic data, QueryFilter[] filters)
{
int start = 0;
string MemberPhone = "";
if (data != null)
{
MemberPhone = data.query;
data = new { query = "select * from mem_memberbase_p where MemUsualPhone='"+ MemberPhone+"'" };
}
//将参数转换成JSON数据
var json = JsonConvert.SerializeObject(data);
//通过传来的SQL语句,转换成DSL语句
string sql = Util.ElasticQuery("_sql/translate?format=json", "POST", json);
//TranslateSqlResponse result = _LowLevelclient.Sql.Translate(PostData.String(json));
//string sql = result.ApiCall.ResponseBodyInBytes();
string from = "\"from\":" + start + ",";
sql = sql.Insert(1, from);
//通过转换的DSL语句,获取数据
//var str = Util.ElasticQuery("mem_memberbase_p/_search?format=json", "POST", sql);
int sourceIndex = sql.IndexOf("\"_source\":{");
int sourceIndexEnd = sql.IndexOf("},", sourceIndex);
string sourcestr = sql.Substring(sourceIndex, sourceIndexEnd - sourceIndex + 1);
sql = sql.Replace(sourcestr, "\"_source\":{\"includes\":[\"*\"], \"excludes\": []}");
int fieldIndex = sql.IndexOf("\"docvalue_fields\":[");
int fieldIndexEnd = sql.IndexOf("],", fieldIndex);
sql = sql.Remove(fieldIndex, fieldIndexEnd - fieldIndex + 2);
PostData dsl = sql;
var result = _LowLevelclient.Search("mem_memberbase_p", dsl);
var DynamicObject = JsonConvert.DeserializeObject(result.Body);
List source = new List();
//总数
long totalCount = 0;
//JSON转Root对象
//将Root对象中的子对象取出来
if (DynamicObject.hits.hits.Count > 0)
{
HitsItem[] hits = DynamicObject.hits.hits.ToObject[]>();
//List _source = new List(0);
//_source = inerhits.Select(x => x.entity()).ToList();
foreach (HitsItem o in hits)
{
string[] phones = new string[1];
phones[0] = o._source.MemUsualPhone;
var phones1 = CommonDAL.getPhoneDecrypt(phones);
string phoneStars = phones1[0];
if (phoneStars != null && phoneStars.Length > 8) {
string replaced = phoneStars.Substring(3,4);
phoneStars = phoneStars.Replace(replaced,"****");
}
o._source.MemUsualPhoneCr = o._source.MemUsualPhone;
o._source.MemUsualPhone = phoneStars;
o._source.MemUsualPhoneOr = phones1[0];
o._source._id = o._id;
source.Add(o._source);
}
totalCount = DynamicObject.hits.total.value;
//var jsonData = JsonConvert.SerializeObject(_source);
}
return Json(
new
{
items = source,
temsCount = totalCount,
success =true
});
}
[HttpPost]
[Route("EditMemberBase")]
public ActionResult EditMemberBase([FromBody]dynamic data)
{
var success = false;
string docId = data._id;
data.Remove("_id");
data.MemUsualPhone = data.MemUsualPhoneCr;
data.Remove("MemUsualPhoneOr");
data.Remove("MemUsualPhoneCr");
Dictionary doc = null;
if (data.updates !=null && data.updates.Count>0)
{
docId = data.updates[0]._id;
//var response = _esclient.Get(docId, idx => idx.Index("mem_memberbase_p")); // returns an IGetResponse mapped 1-to-1 with the Elasticsearch JSON response
//var Source = response.Source; // the original document
Dictionary memdoc = new Dictionary();
foreach(var data1 in data.updates) {
if (data1.update == "true" && data1.updateField != null
&& data1.updateFieldValue != null) {
string updateField = data1.updateField;
string updateFieldValue = data1.updateFieldValue;
memdoc[updateField] = updateFieldValue;
}
}
doc = memdoc;
}
else
{
doc = data.ToObject>();
}
data["LastUpdatedDate"] = DateTime.UtcNow;
var jsons = JsonConvert.SerializeObject(new
{
doc = doc
}
);
var param = new UpdateRequestParameters();
param.Refresh = Refresh.True;
var Response = _LowLevelclient.Update("mem_memberbase_p", docId, jsons, param);
dynamic t = JsonConvert.DeserializeObject(
Response.Body
);
if (t.result == "updated")
{
success = true;
}
else
{
success = false;
}
return Json(
new
{
msg = "",
success = success
});
}
}
}