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, $"搜索服务暂时不可用!")); } } } }