一、基础查询
//条件单个
var mustQuerys = new List<Func<QueryContainerDescriptor<RequestFunds>, QueryContainer>>();
//条件集合
if (input.BrokerIds.Any())
{
mustQuerys.Add(q => q.Terms(t => t.Field(f => f.BrokerId).Terms(input.BrokerIds)));
}
//关键字检索
if (!string.IsNullOrEmpty(input.Keyword))
{
//关键字搜索
mustQuerys.Add(q => q.Wildcard(w => w.JYCode, $"*{input.Keyword}*")
|| q.Wildcard(w => w.Payee, $"*{input.Keyword}*")
);
}
//时间范围检索
if (input.BeginTime != null)
mustQuerys.Add(q => q.DateRange(d => d.Field(f =>f.CreationTime).GreaterThanOrEquals(input.BeginTime.Value.LocalDateTime.Date)));
if (input.EndTime != null)
mustQuerys.Add(q => q.DateRange(d => d.Field(f =>f.CreationTime).LessThan(input.EndTime.Value.LocalDateTime.Date.AddDays(1))));
//或
if (input.IsAffirm.HasValue && input.IsAffirm.Value == false)
{
var should = new List<Func<QueryContainerDescriptor<Proceeds>, QueryContainer>>();
should.Add(q => q.Term(t => t.IsAffirm, input.IsAffirm));
should.Add(q => q.Bool(m => m.MustNot(q => q.Exists(t => t.Field(t => t.IsAffirm)))));
mustQuerys.Add(mu => mu.Bool(b => b.Should(should)));
}
//不等于
mustNotQuerys.Add(q => q.Term(t => t.Status.Value, "refund-confirmed"));
//参数时间在库中时间交集检索
mustNotQuerys.Add(m =>
(m.DateRange(d => d.Field(f => f.RentBeginTime).GreaterThan(param.RentEndTime.LocalDateTime.Date.AddDays(1))))
||
(m.DateRange(d => d.Field(f => f.RentEndTime).LessThan(param.RentBeginTime.LocalDateTime.Date)))
);
var query = await _elastic.SearchAsync<RequestFunds>(s =>
s.Index(ESIndexName.RequestFunds + "*")
.Query(q => q.Bool(b => b.Must(mustQuerys).MustNot(mustNotQuerys)))
.Sort(o => o.Descending(d => d.ProcessingDate))
.From((input.PageIndex - 1) * input.PageSize)
.Size(input.PageSize)
);
var queryDocs = query.Documents;
//关联表转定信息
var depositQuery = await _elastic.SearchAsync<Deposits>(s =>
s.Index(ESIndexName.Deposit)
.Query(q => q.Terms(t => t.Field(f => f.JYCode).Terms(queryDocs.Select(e =>e.JYCode).ToArray())))
.Size(_defaultSearchSize)
);
return new PageModel<RequestFundsDto>(Convert.ToInt32(query.Total), query.Documents.Select(o =>
new RequestFundsDto(o.QKCode.ToString(), o.JYCode, o.DemandType, o.SignType, o.RequestFundsAmount, o.Payee,
o.CreationTime.DateTime, o.CirculationStatus, o.ProcessingStatus, o.ProcessingDate, o.BrokerId, o.BrokerName,
o.BrokerPhone, o.Category, depositQuery.Documents.FirstOrDefault(d => d.JYCode == o.JYCode),
o.CompanyName,o.DepartmentName, o.BigRegionName, o.RegionName, o.StoreName, o.GroupName
)));
二、基础新增
//批量插入 input.Accessories是集合
RequestFundsBingAccessoriesInput rfbai = new RequestFundsBingAccessoriesInput();
ValueNameItem accesType = rfbai.AccessoryTypeInput(input.AccessoriesFlag);
var accessory = input.Accessories.Select(o => new Accessory(input.QKCode, accesType, o.AccessoryName, o.AccessoryUrl?.ToModel(), o.AccessoryRemarks, broker.Name));
var bulkResponse = await _elastic.BulkAsync(b => b.Index(ESIndexName.Accessory).CreateMany(accessory).Refresh(Refresh.True));
if (!bulkResponse.IsValid)
Console.WriteLine($"新增请款项附件{input.QKCode}失败:" + bulkResponse.DebugInformation);
//单条新增一
var requestFunds = new RequestFunds(Guid.Parse(id), request.JYCode, qkCode,
request.RequestFundsAmount, request.PaymentType,
request.RequestFundsRemark, request.BankCardType,
request.BankOpenName,request.Payee, request.BankAccount,
request.PhoneNumber, request.IdCard, JYCodeExtension.GetBrokerCode(_elastic, broker.CompanyId, broker.Id),
broker, broker.City, request.Category,request.RfOptFlag
,request.CollectionType,request.BranchOpenName, signType,"意向","意向金",request.RefundType);
var response = await _elastic.UpdateAsync<RequestFunds>(new UpdateRequest<RequestFunds, RequestFunds>(ESIndexName.RequestFunds, TypeName.From<RequestFunds>(), id)
{
Doc = requestFunds,
Refresh = Refresh.True
});
//单条新增二
var logContentObject = new LogContentObject(qkCode, "新增请款", "QK");
var log = new OperationLog(request.JYCode, $"{broker.OuName}-{broker.Name}",null, JsonConvert.SerializeObject(logContentObject),null, broker.City,null);
var logresponse = await _elastic.CreateAsync<OperationLog>(log, c => c.Index(ESIndexName.OperationLog).Refresh(Refresh.True));
三、基础删除
var mustQuerys = new List<Func<QueryContainerDescriptor<RequestFunds>, QueryContainer>>();
mustQuerys.Add(q => q.DateRange(d => d.Field(f => f.CreationTime).GreaterThanOrEquals("2021-06-01T14:52:18.711Z")));
mustQuerys.Add(q => q.DateRange(d => d.Field(f => f.CreationTime).LessThan(DateTime.Now.AddDays(1))));
var query = await _elastic.SearchAsync<RequestFunds>(s =>
s.Index(ESIndexName.RequestFunds + "*")
.Query(q => q.Bool(b => b.Must(mustQuerys)))
.Sort(o => o.Descending(d => d.ProcessingDate))
.Size(1000)
);
//var requestFunds = query.Documents.FirstOrDefault();
foreach (var del in query.Documents) {
var response = await _elastic.DeleteAsync<RequestFunds>(del, d => d.Index(ESIndexName.RequestFunds).Refresh(Refresh.True));
if (!response.IsValid)
throw new DomainException("删除失败:" + response.DebugInformation);
}
四、基础修改
//请款信息
var queryRequestFunds = await _elastic.SearchAsync<RequestFunds>(s =>
s.Index(ESIndexName.RequestFunds)
.Query(q => q.Term(t => t.QKCode, request.QKCode))
);
if (queryRequestFunds.Total == 0)
throw new DomainException("请款不存在");
var requestFunds = queryRequestFunds.Documents.FirstOrDefault();
var path = new DocumentPath<RequestFunds>(requestFunds);
var response = await _elastic.UpdateAsync<RequestFunds, object>(path, p =>
p.Index(ESIndexName.RequestFunds)
.Doc(new
{
processingDate = DateTime.Now,
rejectReason = request.RejectReason,
isAccountConfirmed = isConf,
accountingOpeStatus = true
})
.Refresh(Refresh.True)
);
if (!response.IsValid)
throw new DomainException("修改失败:" + response.DebugInformation);