using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options;
using MySqlX.XDevAPI;
using OASystem.API.OAMethodLib.ChatGPT;
using OASystem.API.OAMethodLib.GoogleMapAPI;
using OASystem.API.OAMethodLib.JuHeAPI;
using OASystem.API.OAMethodLib.YouDaoAPI;
using OASystem.Domain.Dtos.Groups;
using OASystem.Domain.Dtos.SmallFun;
using OASystem.Domain.ViewModels.JuHeExchangeRate;
using OASystem.Domain.ViewModels.SmallFun;
using SqlSugar;
using System.Buffers;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Collections.Specialized;
using System.Diagnostics;
using System.Text.Json;
using System.Text.Json.Nodes;
using System.Transactions;
using System.Xml.Linq;
namespace OASystem.API.Controllers
{
///
/// 小功能接口
///
[Route("api/[controller]/[action]")]
[ApiController]
public class SmallFunController : ControllerBase
{
private readonly IJuHeApiService _juHeApiService;
private readonly IConfiguration _config;
///
/// 初始化
///
///
public SmallFunController(IJuHeApiService juHeApiService, IConfiguration config)
{
this._juHeApiService = juHeApiService;
this._config = config;
}
#region 聚合API 汇率相关
///
/// 获取汇率币种
///
///
[HttpPost]
[ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
public async Task GetCurrencys()
{
var rateCurrencyData = AppSettingsHelper.Get("RateCurrency");
return Ok(JsonView(rateCurrencyData));
}
///
/// 获取汇率费用
///
///
[HttpPost]
[ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
public async Task GetCurrencyExchange(ExchangeRateDto rateDto)
{
#region 参数处理
if (string.IsNullOrEmpty(rateDto.CurrencyCodePer) || string.IsNullOrEmpty(rateDto.CurrencyCodeSuf))
{
return Ok(JsonView(false, "币种参数为空!"));
}
if (rateDto.Money <= 0)
{
return Ok(JsonView(false, "转换金额 <= 0!"));
}
#endregion
var result = await _juHeApiService.GetExchangeRateAsync(rateDto);
if (result.Code != 0 || result == null)
{
return Ok(JsonView(false, result.Msg));
}
return Ok(JsonView(result.Data));
}
#endregion
#region 有道API 文本翻译
///
/// 有道翻译 所有语种
///
///
[HttpPost]
[ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
public async Task GetLuaguages()
{
var luaguages = new GetYouDaoLanguages().Luanguages;
return Ok(JsonView(luaguages));
}
///
/// 有道翻译
///
/// 待翻译的文本 目前只支持 中转英
///
[HttpPost]
[ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
public async Task GetTranslate(YouDaoDto dto)
{
if (string.IsNullOrEmpty(dto.Txt))
{
return Ok(JsonView("待翻译的文本不能为空!"));
}
string from = "zh-CHS", to = "en";
if (!string.IsNullOrEmpty(dto.From) && !string.IsNullOrEmpty(dto.To))
{
var luaguuages = new GetYouDaoLanguages().Luanguages;
var fromLuaguage = luaguuages.Where(a => a.Code == dto.From).FirstOrDefault();
var toLuaguage = luaguuages.Where(a => a.Code == dto.To).FirstOrDefault();
if (fromLuaguage == null)
{
return Ok(JsonView("源语言code不支持!"));
}
if (toLuaguage == null)
{
return Ok(JsonView("目标语言code不支持!"));
}
from = dto.From;
to = dto.To;
}
var translateData = await YouDaoApiTools.GetReTrans(dto.Txt, from, to);
if (translateData == null || translateData.Code != 0)
{
return Ok(JsonView(false, translateData.Msg));
}
return Ok(JsonView( new { translation = translateData.Data }));
}
#endregion
#region googleMapApi
///
/// googleMapApi 获取距离And时间
///
///
/// 请求参数默认值
/// origin:"FERİT RECAİ ERTUĞRUL CAD. NO: 18 ORAN / ANKARA,Turkey";
/// destination : "Dudullu Mh. Imes Sanayi Sitesi 504. Sk. No:4/B1 Umraniye/Istanbul";
///
///
[HttpPost]
[ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
public async Task GetGooglMapForeignAndTime(GoogleMapDirectionsDto dto)
{
var data = await GoogleMapTools.GetForeignAndTime(dto.origin,dto.destination);
if (data == null || data.Code != 0)
{
return Ok(JsonView(false, data.Msg));
}
return Ok(JsonView(data.Data));
}
#endregion
#region ChatGPT
///
/// ChatGPT 自动补全
///
///
///
[HttpPost]
[ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
public async Task ChatGptCompletions(CompletionsDto dto)
{
if (string.IsNullOrEmpty(dto.Prompt))
{
return Ok(JsonView(false,"待自动补全的文本为空!"));
}
Stopwatch sw = new Stopwatch();
sw.Start();
Thread.Sleep(999);
Console.WriteLine($"程序耗时:{sw.ElapsedMilliseconds}ms.");
var data = await ChatGPTTools.Completions(dto.Prompt);
sw.Stop();
if (data == null || data.Code != 0)
{
return Ok(JsonView(false, data.Msg+"【耗时:"+ sw.ElapsedMilliseconds/1000+ "ms】"));
}
return Ok(JsonView(200, "【耗时:"+ sw.ElapsedMilliseconds/1000 + "s】", data.Data));
}
#endregion
}
}