using EyeSoft.Collections.Generic;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using NPOI.SS.Formula.Functions;
using OASystem.API.OAMethodLib.DeepSeekAPI;
using OASystem.API.OAMethodLib.GenericSearch;
using OASystem.Domain.AesEncryption;
using OASystem.Domain.Entities.Customer;
using OASystem.Domain.Entities.Financial;
using OASystem.Domain.Entities.Groups;
using OASystem.Domain.ViewModels.Search;
using OASystem.Infrastructure.Repositories.System;
using static iTextSharp.text.pdf.AcroFields;
namespace OASystem.API.Controllers
{
///
/// 搜索
///
[Route("api/search")]
[ApiController]
public class SearchController : ControllerBase
{
private readonly SqlSugarClient _sqlSugar;
private readonly DynamicSearchService _groupSearchService;
private readonly DynamicSearchService _clientSearchService;
public SearchController(
SqlSugarClient sqlSugar,
DynamicSearchService groupSearchService,
DynamicSearchService clientSearchService
)
{
_sqlSugar = sqlSugar;
_groupSearchService = groupSearchService;
_clientSearchService = clientSearchService;
}
///
/// 接团信息 关键字输入提示(单字段)
///
/// 关键字
///
[HttpGet("group/{keyword}")]
[ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
public async Task GroupKeywordSearch(string keyword)
{
try
{
// 验证请求参数
if (string.IsNullOrEmpty(keyword))
{
return Ok(JsonView(true, $"暂无数据!"));
}
var searchRequest = new DynamicSearchRequest
{
Keyword = keyword,
RequireAllSingleChars = true,
PageIndex = 1,
PageSize = 999999,
FieldWeights = new Dictionary
{
{ "TeamName", 10 },
//{ "ClientUnit", 8 },
//{ "ClientName", 6 }
},
Filters = new List()
{
new(){Field = "IsDel",Operator="eq",Value="0" }
},
OrderBy = "TeamName",
ReturnFields = new List() { "TeamName" }
};
// 验证字段配置
var validation = _groupSearchService.ValidateFieldConfig(
searchRequest.FieldWeights,
searchRequest.ReturnFields);
if (!validation.IsValid)
{
return Ok(JsonView(true, $"暂无数据!{validation.Message}"));
}
var result = await _groupSearchService.SearchAsync(searchRequest);
if (result.Success)
{
var data = result.Items.Select(x => new { x.Data.Id, x.Data.TeamName }).ToList();
return Ok(JsonView(true, result.Message, data, data.Count));
}
return Ok(JsonView(true, result.Message));
}
catch (Exception ex)
{
return Ok(JsonView(true, $"搜索服务暂时不可用!"));
}
}
///
/// 客户资料 关键字输入提示(多字段)
///
/// 关键字
/// 关键字
///
[HttpGet("group/{userId}/{keyword}")]
[ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
public async Task ClientKeywordSearch(int userId,string keyword)
{
try
{
// 验证请求参数
if (string.IsNullOrEmpty(keyword))
{
return Ok(JsonView(true, $"暂无数据!"));
}
//查询有权限的数据
var clientIds = await _sqlSugar
.Queryable()
.Where(x => x.IsDel == 0 && x.usersId == userId)
.Select(x => x.NewClientDataId)
.ToListAsync();
if (clientIds == null || clientIds.Count < 1)
{
return Ok(JsonView(true, $"暂无数据!"));
}
var data = _sqlSugar.Queryable()
.Where(x => x.IsDel == 0 && clientIds.Contains(x.Id))
.OrderByDescending(x => x.CreateTime)
.Select(x => new NewClientDataView (){
Id = x.Id,
Client = x.Client,
Contact = x.Contact,
Job = x.Job,
Telephone = x.Telephone,
Location = x.Location,
})
.ToList();
int index = 0;
data.ForEach(x =>
{
index++;
x.RowNumber = index;
x.Client = AesEncryptionHelper.Decrypt(x.Client);
x.Contact = AesEncryptionHelper.Decrypt(x.Contact);
x.Job = AesEncryptionHelper.Decrypt(x.Job);
x.Telephone = AesEncryptionHelper.Decrypt(x.Telephone);
x.Location = AesEncryptionHelper.Decrypt(x.Location);
});
var searchRequest = new DynamicSearchRequest
{
Keyword = keyword,
RequireAllSingleChars = true,
PageIndex = 1,
PageSize = 999999,
FieldWeights = new Dictionary
{
{ "Client", 10 },
{ "Contact", 8 },
{ "Location", 6 }
},
OrderBy = "CreateTime"
};
// 验证字段配置
var validation = _clientSearchService.ValidateFieldConfig(
searchRequest.FieldWeights,
searchRequest.ReturnFields);
if (!validation.IsValid)
{
return Ok(JsonView(true, $"暂无数据!{validation.Message}"));
}
var result = _clientSearchService.SearchDataSource(searchRequest,data);
if (result.Success)
{
var view = result.Items.Select(x => x.Data).ToList();
int resetIndex = 0;
view.ForEach(x => {
resetIndex++;
x.RowNumber = resetIndex;
});
return Ok(JsonView(true, result.Message, view, view.Count));
}
return Ok(JsonView(true,"暂无数据"));
}
catch (Exception ex)
{
return Ok(JsonView(true, $"搜索服务暂时不可用!"));
}
}
}
}