Merge branch 'refs/heads/development'
This commit is contained in:
@@ -21,8 +21,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Scheduled", "Scheduled", "{
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dlhis.Basic", "Src\Dlhis.Basic\Dlhis.Basic.csproj", "{D1F81CB7-F3EF-4196-A751-468248368020}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dlhis.Basic", "Src\Dlhis.Basic\Dlhis.Basic.csproj", "{D1F81CB7-F3EF-4196-A751-468248368020}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dlhis.User", "Src\Dlhis.User\Dlhis.User.csproj", "{9F9BC299-3CDD-4CCE-80CA-5FE57332B1F0}"
|
|
||||||
EndProject
|
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dlhis.Sys", "Src\Dlhis.Sys\Dlhis.Sys.csproj", "{925048C9-5940-4B51-8480-4DC908C754A1}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dlhis.Sys", "Src\Dlhis.Sys\Dlhis.Sys.csproj", "{925048C9-5940-4B51-8480-4DC908C754A1}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dlhis.Sys.Api", "Src\Dlhis.Sys.Api\Dlhis.Sys.Api.csproj", "{85A345C7-913E-4C1B-BE1C-600DE408A02F}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dlhis.Sys.Api", "Src\Dlhis.Sys.Api\Dlhis.Sys.Api.csproj", "{85A345C7-913E-4C1B-BE1C-600DE408A02F}"
|
||||||
@@ -77,10 +75,6 @@ Global
|
|||||||
{D1F81CB7-F3EF-4196-A751-468248368020}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{D1F81CB7-F3EF-4196-A751-468248368020}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{D1F81CB7-F3EF-4196-A751-468248368020}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{D1F81CB7-F3EF-4196-A751-468248368020}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{D1F81CB7-F3EF-4196-A751-468248368020}.Release|Any CPU.Build.0 = Release|Any CPU
|
{D1F81CB7-F3EF-4196-A751-468248368020}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
{9F9BC299-3CDD-4CCE-80CA-5FE57332B1F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{9F9BC299-3CDD-4CCE-80CA-5FE57332B1F0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{9F9BC299-3CDD-4CCE-80CA-5FE57332B1F0}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{9F9BC299-3CDD-4CCE-80CA-5FE57332B1F0}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{925048C9-5940-4B51-8480-4DC908C754A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{925048C9-5940-4B51-8480-4DC908C754A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{925048C9-5940-4B51-8480-4DC908C754A1}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{925048C9-5940-4B51-8480-4DC908C754A1}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{925048C9-5940-4B51-8480-4DC908C754A1}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{925048C9-5940-4B51-8480-4DC908C754A1}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
@@ -138,7 +132,6 @@ Global
|
|||||||
{4C1FADD9-8AFB-4087-9E52-EE6D6523ED38} = {4EBCE46B-CE3A-4A47-9432-82A1854CA58A}
|
{4C1FADD9-8AFB-4087-9E52-EE6D6523ED38} = {4EBCE46B-CE3A-4A47-9432-82A1854CA58A}
|
||||||
{FD8D38C5-0827-49D1-A0BA-7707FBFDA2EC} = {4EBCE46B-CE3A-4A47-9432-82A1854CA58A}
|
{FD8D38C5-0827-49D1-A0BA-7707FBFDA2EC} = {4EBCE46B-CE3A-4A47-9432-82A1854CA58A}
|
||||||
{D1F81CB7-F3EF-4196-A751-468248368020} = {4EBCE46B-CE3A-4A47-9432-82A1854CA58A}
|
{D1F81CB7-F3EF-4196-A751-468248368020} = {4EBCE46B-CE3A-4A47-9432-82A1854CA58A}
|
||||||
{9F9BC299-3CDD-4CCE-80CA-5FE57332B1F0} = {57074FD8-1A2F-40C7-8476-001778A3F65D}
|
|
||||||
{925048C9-5940-4B51-8480-4DC908C754A1} = {57074FD8-1A2F-40C7-8476-001778A3F65D}
|
{925048C9-5940-4B51-8480-4DC908C754A1} = {57074FD8-1A2F-40C7-8476-001778A3F65D}
|
||||||
{85A345C7-913E-4C1B-BE1C-600DE408A02F} = {57074FD8-1A2F-40C7-8476-001778A3F65D}
|
{85A345C7-913E-4C1B-BE1C-600DE408A02F} = {57074FD8-1A2F-40C7-8476-001778A3F65D}
|
||||||
{1F337648-8A22-4601-A842-0F634FBA2825} = {4EBCE46B-CE3A-4A47-9432-82A1854CA58A}
|
{1F337648-8A22-4601-A842-0F634FBA2825} = {4EBCE46B-CE3A-4A47-9432-82A1854CA58A}
|
||||||
|
|||||||
37
Src/Dlhis.Middle/Api/FaceBearerTokenHandler.cs
Normal file
37
Src/Dlhis.Middle/Api/FaceBearerTokenHandler.cs
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
using System.Text;
|
||||||
|
using Dlhis.Middle.Response;
|
||||||
|
using Kurisu.AspNetCore.UnifyResultAndValidation;
|
||||||
|
using Kurisu.RemoteCall.Abstractions;
|
||||||
|
using Microsoft.Extensions.Caching.Memory;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
namespace Dlhis.Middle.Api
|
||||||
|
{
|
||||||
|
public class FaceBearerTokenHandler : IAuthTokenHandler
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
public string GetToken(IServiceProvider serviceProvider)
|
||||||
|
{
|
||||||
|
var cache = serviceProvider.GetService<IMemoryCache>();
|
||||||
|
if (cache.TryGetValue("token", out string token)) return "Bearer " + token;
|
||||||
|
|
||||||
|
var httpClient = serviceProvider.GetService<IHttpClientFactory>().CreateClient("face");
|
||||||
|
var hostName = serviceProvider.GetService<IConfiguration>().GetSection("HostName").Value;
|
||||||
|
|
||||||
|
var tokenResponse = httpClient.PostAsync($"https://{hostName}/api/user/oauth2/clientgrant", new StringContent(JsonConvert.SerializeObject(new
|
||||||
|
{
|
||||||
|
ClientId = "e509c2aaa98e300c",
|
||||||
|
ClientSecret = "6184d8979fc48105"
|
||||||
|
}), Encoding.UTF8, "application/json")).GetAwaiter().GetResult();
|
||||||
|
|
||||||
|
var tokenJson = tokenResponse.Content.ReadAsStringAsync().GetAwaiter().GetResult();
|
||||||
|
var tokenInfo = JsonConvert.DeserializeObject<DefaultApiResult<TokenResponse>>(tokenJson);
|
||||||
|
|
||||||
|
token = tokenInfo.Data.AccessToken;
|
||||||
|
|
||||||
|
cache.Set("token", token, TimeSpan.FromSeconds(tokenInfo.Data.Expires));
|
||||||
|
|
||||||
|
return token;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
14
Src/Dlhis.Middle/Api/IAssignmentDeviceTaskApi.cs
Normal file
14
Src/Dlhis.Middle/Api/IAssignmentDeviceTaskApi.cs
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
using Dlhis.Middle.Request;
|
||||||
|
using Dlhis.Middle.Response;
|
||||||
|
using Kurisu.AspNetCore.UnifyResultAndValidation;
|
||||||
|
using Kurisu.RemoteCall.Attributes;
|
||||||
|
|
||||||
|
namespace Dlhis.Middle.Api;
|
||||||
|
|
||||||
|
[EnableRemoteClient(Name = "face-service", BaseUrl = "${Authority}")]
|
||||||
|
public interface IAssignmentDeviceTaskApi
|
||||||
|
{
|
||||||
|
[Auth(TokenHandler = typeof(FaceBearerTokenHandler))]
|
||||||
|
[Post("/api/scheduled/assignments/deviceTasks")]
|
||||||
|
Task<DefaultApiResult<List<DeviceTaskToDeviceByDeviceResponse>>> DeviceGetTasksAsync(DeviceTaskGetRequest request);
|
||||||
|
}
|
||||||
15
Src/Dlhis.Middle/Api/ICanteenApi.cs
Normal file
15
Src/Dlhis.Middle/Api/ICanteenApi.cs
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
using Dlhis.Middle.Request;
|
||||||
|
using Dlhis.Middle.Response;
|
||||||
|
using Kurisu.AspNetCore.UnifyResultAndValidation;
|
||||||
|
using Kurisu.RemoteCall.Attributes;
|
||||||
|
|
||||||
|
namespace Dlhis.Middle.Api;
|
||||||
|
|
||||||
|
[EnableRemoteClient(Name = "face-service", BaseUrl = "${Authority}")]
|
||||||
|
public interface ICanteenApi
|
||||||
|
{
|
||||||
|
|
||||||
|
[Auth(TokenHandler = typeof(FaceBearerTokenHandler))]
|
||||||
|
[Post("/api/canteen/orders")]
|
||||||
|
Task<DefaultApiResult<OrderResultResponse>> AddAsync(OrderAddRequest request);
|
||||||
|
}
|
||||||
76
Src/Dlhis.Middle/Controllers/AssignmentsController.cs
Normal file
76
Src/Dlhis.Middle/Controllers/AssignmentsController.cs
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
using Dlhis.Entity.Device.Enums;
|
||||||
|
using Dlhis.Middle.Api;
|
||||||
|
using Dlhis.Middle.Request;
|
||||||
|
using Dlhis.Middle.Response;
|
||||||
|
using Kurisu.AspNetCore.DataAccess.SqlSugar.Aop;
|
||||||
|
using Kurisu.AspNetCore.UnifyResultAndValidation;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using Microsoft.AspNetCore.WebUtilities;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
|
namespace Dlhis.Middle.Controllers;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 任务分配
|
||||||
|
/// </summary>
|
||||||
|
[Route("api/scheduled/[controller]")]
|
||||||
|
[ApiController]
|
||||||
|
public class AssignmentsController : ControllerBase
|
||||||
|
{
|
||||||
|
private readonly IAssignmentDeviceTaskApi _assignmentDeviceTaskApi;
|
||||||
|
private readonly string _internalIp;
|
||||||
|
|
||||||
|
public AssignmentsController(IAssignmentDeviceTaskApi assignmentDeviceTaskApi, IConfiguration configuration)
|
||||||
|
{
|
||||||
|
_assignmentDeviceTaskApi = assignmentDeviceTaskApi;
|
||||||
|
_internalIp = configuration.GetSection("InternalIP").Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取设备任务(按设备)
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
[IgnoreTenant]
|
||||||
|
[HttpGet("deviceTasks")]
|
||||||
|
public async Task<DefaultApiResult<List<DeviceTaskToDeviceByDeviceResponse>>> DeviceGetTasksGetAsync([FromQuery] DeviceTaskGetRequest request)
|
||||||
|
{
|
||||||
|
var result = await _assignmentDeviceTaskApi.DeviceGetTasksAsync(request);
|
||||||
|
foreach (var data in result.Data)
|
||||||
|
{
|
||||||
|
foreach (var task in data.Tasks.Where(x => x.Type != DeviceTaskEnumType.Delete))
|
||||||
|
{
|
||||||
|
var currentUser = JObject.FromObject(task.Info).ToObject<UserToDeviceResponse>();
|
||||||
|
var token = QueryHelpers.ParseQuery(currentUser.Face).First().Value;
|
||||||
|
currentUser.Face = $"http://{_internalIp}/api/basic/gainfos/face?token=" + token;
|
||||||
|
|
||||||
|
task.Info = currentUser;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取设备任务(按设备)
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpPost("deviceTasks")]
|
||||||
|
[IgnoreTenant]
|
||||||
|
public async Task<DefaultApiResult<List<DeviceTaskToDeviceByDeviceResponse>>> DeviceGetTasksPostAsync(DeviceTaskGetRequest request)
|
||||||
|
{
|
||||||
|
var result = await _assignmentDeviceTaskApi.DeviceGetTasksAsync(request);
|
||||||
|
foreach (var data in result.Data)
|
||||||
|
{
|
||||||
|
foreach (var task in data.Tasks.Where(x => x.Type != DeviceTaskEnumType.Delete))
|
||||||
|
{
|
||||||
|
var currentUser = JObject.FromObject(task.Info).ToObject<UserToDeviceResponse>();
|
||||||
|
var token = QueryHelpers.ParseQuery(currentUser.Face).First().Value;
|
||||||
|
currentUser.Face = $"http://{_internalIp}/api/basic/gainfos/face?token=" + token;
|
||||||
|
|
||||||
|
task.Info = currentUser;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
52
Src/Dlhis.Middle/Controllers/GainfosController.cs
Normal file
52
Src/Dlhis.Middle/Controllers/GainfosController.cs
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
using Dlhis.Middle.Filters;
|
||||||
|
using Microsoft.AspNetCore.Authorization;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
|
namespace Dlhis.Middle.Controllers;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// sap档案表
|
||||||
|
/// </summary>
|
||||||
|
[Route("api/basic/[controller]")]
|
||||||
|
[ApiController]
|
||||||
|
public class GainfosController : ControllerBase
|
||||||
|
{
|
||||||
|
private readonly IHttpClientFactory _httpClientFactory;
|
||||||
|
private readonly IConfiguration _configuration;
|
||||||
|
|
||||||
|
public GainfosController(IHttpClientFactory httpClientFactory, IConfiguration configuration)
|
||||||
|
{
|
||||||
|
_httpClientFactory = httpClientFactory;
|
||||||
|
_configuration = configuration;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 通过token获取人脸照片,失效或者找不到返回HttpStatus404状态码
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="token"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[NotFound]
|
||||||
|
[AllowAnonymous]
|
||||||
|
[HttpGet("face")]
|
||||||
|
public async Task<IActionResult> GetFaceAsync(string token)
|
||||||
|
{
|
||||||
|
var hostName = _configuration.GetSection("HostName").Value;
|
||||||
|
var httpClient = _httpClientFactory.CreateClient();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var faceBytes = await httpClient.GetByteArrayAsync($"https://{hostName}/api/basic/gainfos/face?token={token}");
|
||||||
|
|
||||||
|
if (faceBytes.Length == 0)
|
||||||
|
{
|
||||||
|
return new NotFoundResult();
|
||||||
|
}
|
||||||
|
|
||||||
|
return new FileContentResult(faceBytes, "image/png");
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
return new NotFoundResult();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,9 +1,8 @@
|
|||||||
using Dlhis.Middle.Request;
|
using Dlhis.Middle.Api;
|
||||||
|
using Dlhis.Middle.Request;
|
||||||
using Dlhis.Middle.Response;
|
using Dlhis.Middle.Response;
|
||||||
using Dlhis.Middle.Services;
|
|
||||||
using Kurisu.AspNetCore.DataAccess.SqlSugar.Aop;
|
using Kurisu.AspNetCore.DataAccess.SqlSugar.Aop;
|
||||||
using Kurisu.AspNetCore.UnifyResultAndValidation;
|
using Kurisu.AspNetCore.UnifyResultAndValidation;
|
||||||
using Microsoft.AspNetCore.Authorization;
|
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
namespace Dlhis.Middle.Controllers;
|
namespace Dlhis.Middle.Controllers;
|
||||||
@@ -15,11 +14,11 @@ namespace Dlhis.Middle.Controllers;
|
|||||||
[ApiController]
|
[ApiController]
|
||||||
public class OrdersController : ControllerBase
|
public class OrdersController : ControllerBase
|
||||||
{
|
{
|
||||||
private readonly IOrderService _orderService;
|
private readonly ICanteenApi _canteenApi;
|
||||||
|
|
||||||
public OrdersController(IOrderService orderService)
|
public OrdersController(ICanteenApi canteenApi)
|
||||||
{
|
{
|
||||||
_orderService = orderService;
|
_canteenApi = canteenApi;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -31,6 +30,6 @@ public class OrdersController : ControllerBase
|
|||||||
[IgnoreTenant]
|
[IgnoreTenant]
|
||||||
public async Task<DefaultApiResult<OrderResultResponse>> AddAsync(OrderAddRequest request)
|
public async Task<DefaultApiResult<OrderResultResponse>> AddAsync(OrderAddRequest request)
|
||||||
{
|
{
|
||||||
return await _orderService.AddAsync(request);
|
return await _canteenApi.AddAsync(request);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -17,6 +17,7 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Kurisu.RemoteCall" Version="0.4.2" />
|
||||||
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="8.0.6" />
|
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="8.0.6" />
|
||||||
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.19.5" />
|
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.19.5" />
|
||||||
<PackageReference Include="SQLitePCLRaw.bundle_e_sqlcipher" Version="2.1.8" />
|
<PackageReference Include="SQLitePCLRaw.bundle_e_sqlcipher" Version="2.1.8" />
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
using Dlhis.Entity.Device.Enums;
|
using Dlhis.Entity.Device.Enums;
|
||||||
using Kurisu.AspNetCore.Utils.Extensions;
|
using Kurisu.AspNetCore.Utils.Extensions;
|
||||||
|
|
||||||
namespace Dlhis.ScheduledTask.TaskAssignment.Response;
|
namespace Dlhis.Middle.Dto;
|
||||||
|
|
||||||
public class TaskCombineDto
|
public class TaskCombineDto
|
||||||
{
|
{
|
||||||
30
Src/Dlhis.Middle/Filters/NotFoundAttribute.cs
Normal file
30
Src/Dlhis.Middle/Filters/NotFoundAttribute.cs
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
using Kurisu.AspNetCore.UnifyResultAndValidation;
|
||||||
|
using Kurisu.AspNetCore.UnifyResultAndValidation.Abstractions;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using Microsoft.AspNetCore.Mvc.Filters;
|
||||||
|
|
||||||
|
namespace Dlhis.Middle.Filters;
|
||||||
|
|
||||||
|
[AttributeUsage(AttributeTargets.Method)]
|
||||||
|
public class NotFoundAttribute : Attribute, IAsyncResultFilter
|
||||||
|
{
|
||||||
|
public async Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next)
|
||||||
|
{
|
||||||
|
if (context.Result is ObjectResult result)
|
||||||
|
{
|
||||||
|
var type = result.Value?.GetType();
|
||||||
|
if (type.IsGenericType && type.IsAssignableTo(typeof(IApiResult)))
|
||||||
|
{
|
||||||
|
var apiResult = result.Value as DefaultApiResult<object>;
|
||||||
|
|
||||||
|
if (apiResult.Data is ProblemDetails _)
|
||||||
|
{
|
||||||
|
context.Result = new NotFoundResult();
|
||||||
|
//context.HttpContext.Response
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
await next();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
using Dlhis.Middle.Services;
|
using Dlhis.Middle.Services;
|
||||||
using Dlhis.Middle.Services.Implements;
|
using Dlhis.Middle.Services.Implements;
|
||||||
|
using Kurisu.AspNetCore;
|
||||||
using Kurisu.AspNetCore.Startup;
|
using Kurisu.AspNetCore.Startup;
|
||||||
using Microsoft.IdentityModel.Logging;
|
using Microsoft.IdentityModel.Logging;
|
||||||
|
|
||||||
@@ -23,6 +24,8 @@ public class Startup : DefaultStartup
|
|||||||
public override void ConfigureServices(IServiceCollection services)
|
public override void ConfigureServices(IServiceCollection services)
|
||||||
{
|
{
|
||||||
base.ConfigureServices(services);
|
base.ConfigureServices(services);
|
||||||
|
|
||||||
|
services.AddRemoteCall(App.ActiveTypes);
|
||||||
services.AddHttpClient("face").ConfigurePrimaryHttpMessageHandler(() =>
|
services.AddHttpClient("face").ConfigurePrimaryHttpMessageHandler(() =>
|
||||||
{
|
{
|
||||||
var handler = new HttpClientHandler
|
var handler = new HttpClientHandler
|
||||||
|
|||||||
42
Src/Dlhis.Middle/Request/DeviceTaskGetRequest.cs
Normal file
42
Src/Dlhis.Middle/Request/DeviceTaskGetRequest.cs
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using Dlhis.Entity.Device.Enums;
|
||||||
|
using Kurisu.AspNetCore.DataAccess.Dto;
|
||||||
|
using Kurisu.AspNetCore.Utils.Extensions;
|
||||||
|
|
||||||
|
namespace Dlhis.Middle.Request;
|
||||||
|
|
||||||
|
public class DeviceTaskGetRequest : PageDto, IValidatableObject
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 品牌
|
||||||
|
/// </summary>
|
||||||
|
public string Brand { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 设备号
|
||||||
|
/// </summary>
|
||||||
|
public string DeviceUniqueNo { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 任务类型
|
||||||
|
/// </summary>
|
||||||
|
public List<DeviceTaskEnumType> Types { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取处理中的任务
|
||||||
|
/// </summary>
|
||||||
|
public bool IsProcess { get; set; } = false;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 厂区
|
||||||
|
/// </summary>
|
||||||
|
public string Factory { get; set; }
|
||||||
|
|
||||||
|
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
|
||||||
|
{
|
||||||
|
if (Brand.IsEmpty() && DeviceUniqueNo.IsEmpty() && Factory.IsEmpty())
|
||||||
|
{
|
||||||
|
yield return new ValidationResult("设备品牌,设备号和厂区不能都为空", new[] { nameof(Brand), nameof(DeviceUniqueNo), nameof(Factory) });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
29
Src/Dlhis.Middle/Response/DeviceTaskToDeviceResponse.cs
Normal file
29
Src/Dlhis.Middle/Response/DeviceTaskToDeviceResponse.cs
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
using Dlhis.Middle.Dto;
|
||||||
|
|
||||||
|
namespace Dlhis.Middle.Response;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 设备任务
|
||||||
|
/// </summary>
|
||||||
|
public class DeviceTaskToDeviceByDeviceResponse
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 品牌
|
||||||
|
/// </summary>
|
||||||
|
public string Brand { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 设备唯一号
|
||||||
|
/// </summary>
|
||||||
|
public string DeviceUniqueNo { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 设备信息
|
||||||
|
/// </summary>
|
||||||
|
public object DeviceInfo { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 任务
|
||||||
|
/// </summary>
|
||||||
|
public List<TaskCombineDto> Tasks { get; set; }
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
using Kurisu.AspNetCore.CustomClass;
|
||||||
|
|
||||||
|
namespace Dlhis.Middle.Response;
|
||||||
|
|
||||||
|
public class UploadRecordToDeviceResponse
|
||||||
|
{
|
||||||
|
public DateTimePeriod DateTimePeriod { get; set; }
|
||||||
|
}
|
||||||
71
Src/Dlhis.Middle/Response/UserToDeviceResponse.cs
Normal file
71
Src/Dlhis.Middle/Response/UserToDeviceResponse.cs
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
using Kurisu.AspNetCore.CustomClass;
|
||||||
|
|
||||||
|
namespace Dlhis.Middle.Response;
|
||||||
|
|
||||||
|
public class UserToDeviceResponse
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 人员唯一id
|
||||||
|
/// </summary>
|
||||||
|
public long UserId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 人员档案号
|
||||||
|
/// </summary>
|
||||||
|
public string UserNo { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 老系统档案号
|
||||||
|
/// </summary>
|
||||||
|
public string OldUserNo { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 人员学工号
|
||||||
|
/// </summary>
|
||||||
|
public string UserCode { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 人员名称
|
||||||
|
/// </summary>
|
||||||
|
public string UserName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 部门号
|
||||||
|
/// </summary>
|
||||||
|
public string DepartmentNo { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 部门名称
|
||||||
|
/// </summary>
|
||||||
|
public string DepartmentName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 卡号
|
||||||
|
/// </summary>
|
||||||
|
public string CardNo { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 人脸
|
||||||
|
/// </summary>
|
||||||
|
public string Face { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 有效日期范围
|
||||||
|
/// </summary>
|
||||||
|
public DatePeriod ValidDatePeriod { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 控制门[1,2,3....]
|
||||||
|
/// </summary>
|
||||||
|
public List<int> Doors { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 时段[1,2,3....]
|
||||||
|
/// </summary>
|
||||||
|
public List<int> TimePeriods { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 假期计划id
|
||||||
|
/// </summary>
|
||||||
|
public int Schedule { get; set; }
|
||||||
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
using Kurisu.AspNetCore.CustomClass;
|
using Kurisu.AspNetCore.CustomClass;
|
||||||
|
|
||||||
namespace Dlhis.ScheduledTask.TaskAssignment.Response;
|
namespace Dlhis.ScheduledTask.TaskAssignment.Dto;
|
||||||
|
|
||||||
public class ScheduleDto
|
public class ScheduleDto
|
||||||
{
|
{
|
||||||
27
Src/Dlhis.ScheduledTask/TaskAssignment/Dto/TaskCombineDto.cs
Normal file
27
Src/Dlhis.ScheduledTask/TaskAssignment/Dto/TaskCombineDto.cs
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
using Dlhis.Entity.Device.Enums;
|
||||||
|
using Kurisu.AspNetCore.Utils.Extensions;
|
||||||
|
|
||||||
|
namespace Dlhis.ScheduledTask.TaskAssignment.Dto;
|
||||||
|
|
||||||
|
public class TaskCombineDto
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 任务id
|
||||||
|
/// </summary>
|
||||||
|
public long TaskId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 任务类型
|
||||||
|
/// </summary>
|
||||||
|
public DeviceTaskEnumType Type { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 任务类型描述
|
||||||
|
/// </summary>
|
||||||
|
public string TypeDesc => Type.GetDescription();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 下发信息
|
||||||
|
/// </summary>
|
||||||
|
public object Info { get; set; }
|
||||||
|
}
|
||||||
@@ -1,4 +1,6 @@
|
|||||||
namespace Dlhis.ScheduledTask.TaskAssignment.Response;
|
using Dlhis.ScheduledTask.TaskAssignment.Dto;
|
||||||
|
|
||||||
|
namespace Dlhis.ScheduledTask.TaskAssignment.Response;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 设备任务
|
/// 设备任务
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
namespace Dlhis.ScheduledTask.TaskAssignment.Response;
|
using Dlhis.ScheduledTask.TaskAssignment.Dto;
|
||||||
|
|
||||||
|
namespace Dlhis.ScheduledTask.TaskAssignment.Response;
|
||||||
|
|
||||||
public class ScheduleToDeviceResponse
|
public class ScheduleToDeviceResponse
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -14,6 +14,11 @@ public class UserToDeviceResponse
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public string UserNo { get; set; }
|
public string UserNo { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 老系统档案号
|
||||||
|
/// </summary>
|
||||||
|
public string OldUserNo { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 人员学工号
|
/// 人员学工号
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ public class AssignmentService : IAssignmentService
|
|||||||
var dc = x.Key.DeviceConnectionInfo ?? "{}";
|
var dc = x.Key.DeviceConnectionInfo ?? "{}";
|
||||||
var func = x.Key.FuncStr ?? "[]";
|
var func = x.Key.FuncStr ?? "[]";
|
||||||
|
|
||||||
var jobj = new JObject
|
var jObj = new JObject
|
||||||
{
|
{
|
||||||
{ "connectionInfo", JToken.Parse(dc) },
|
{ "connectionInfo", JToken.Parse(dc) },
|
||||||
{ "function", JArray.Parse(func) }
|
{ "function", JArray.Parse(func) }
|
||||||
@@ -61,7 +61,7 @@ public class AssignmentService : IAssignmentService
|
|||||||
{
|
{
|
||||||
Brand = b,
|
Brand = b,
|
||||||
DeviceUniqueNo = d,
|
DeviceUniqueNo = d,
|
||||||
DeviceInfo = jobj,
|
DeviceInfo = jObj,
|
||||||
Tasks = x.Select(item =>
|
Tasks = x.Select(item =>
|
||||||
{
|
{
|
||||||
var key = $"face:{item.UserCode}";
|
var key = $"face:{item.UserCode}";
|
||||||
@@ -83,7 +83,7 @@ public class AssignmentService : IAssignmentService
|
|||||||
{
|
{
|
||||||
dto.Info = new UserToDeviceResponse
|
dto.Info = new UserToDeviceResponse
|
||||||
{
|
{
|
||||||
UserId = item.UserId.HasValue ? item.UserId.Value : 0,
|
UserId = item.UserId ?? 0,
|
||||||
UserNo = item.UserNo,
|
UserNo = item.UserNo,
|
||||||
UserCode = item.UserCode,
|
UserCode = item.UserCode,
|
||||||
UserName = item.UserName,
|
UserName = item.UserName,
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using Dlhis.User.Identity.Request;
|
using Dlhis.Sys.Identity.Request;
|
||||||
using Kurisu.AspNetCore.Authentication.Options;
|
using Kurisu.AspNetCore.Authentication.Options;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.Extensions.Options;
|
using Microsoft.Extensions.Options;
|
||||||
using Newtonsoft.Json.Linq;
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
namespace Dlhis.User.Identity.Controllers;
|
namespace Dlhis.Sys.Identity.Controllers;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// OAuth2认证
|
/// OAuth2认证
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
namespace Dlhis.User.Identity.Request;
|
namespace Dlhis.Sys.Identity.Request;
|
||||||
|
|
||||||
public class ClientGrantRequest
|
public class ClientGrantRequest
|
||||||
{
|
{
|
||||||
@@ -91,30 +91,30 @@ public class MenuService : IMenuService
|
|||||||
.Select(x => x.Code)
|
.Select(x => x.Code)
|
||||||
.ToListAsync();
|
.ToListAsync();
|
||||||
|
|
||||||
var menus = await GetListAsync(PlatformEnumType.PCAdmin);
|
// var menus = await GetListAsync(PlatformEnumType.PCAdmin);
|
||||||
|
//
|
||||||
foreach (var menu in menus)
|
// foreach (var menu in menus)
|
||||||
{
|
// {
|
||||||
RecursionHandler(menu, permissionCodes, permissionCodes.Contains(menu.Code));
|
// RecursionHandler(menu, permissionCodes, permissionCodes.Contains(menu.Code));
|
||||||
}
|
// }
|
||||||
|
|
||||||
return permissionCodes;
|
return permissionCodes;
|
||||||
|
|
||||||
static bool RecursionHandler(MenuResponse current, List<string> innerPermissions, bool add)
|
// static bool RecursionHandler(MenuResponse current, List<string> innerPermissions, bool add)
|
||||||
{
|
// {
|
||||||
if (add) innerPermissions.Add(current.Code);
|
// if (add) innerPermissions.Add(current.Code);
|
||||||
|
//
|
||||||
foreach (var menu in current.Items)
|
// foreach (var menu in current.Items)
|
||||||
{
|
// {
|
||||||
var currentAdd = RecursionHandler(menu, innerPermissions, add || innerPermissions.Contains(menu.Code));
|
// var currentAdd = RecursionHandler(menu, innerPermissions, add || innerPermissions.Contains(menu.Code));
|
||||||
if (currentAdd && !innerPermissions.Contains(current.Code))
|
// if (currentAdd && !innerPermissions.Contains(current.Code))
|
||||||
{
|
// {
|
||||||
innerPermissions.Add(current.Code);
|
// innerPermissions.Add(current.Code);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
return add;
|
// return add;
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<List<string>> GetAllAssignmentPermissionsAsync()
|
public async Task<List<string>> GetAllAssignmentPermissionsAsync()
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
using Kurisu.AspNetCore.Startup;
|
using Kurisu.AspNetCore.Startup;
|
||||||
|
|
||||||
namespace Dlhis.User.Packs;
|
namespace Dlhis.Sys.Packs;
|
||||||
|
|
||||||
public class OAuth2HttpClientPack : BaseAppPack
|
public class OAuth2HttpClientPack : BaseAppPack
|
||||||
{
|
{
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
|
||||||
|
|
||||||
<PropertyGroup>
|
|
||||||
<TargetFramework>net6.0</TargetFramework>
|
|
||||||
<Nullable>disable</Nullable>
|
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
|
||||||
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
|
|
||||||
<DockerfileContext>..\..</DockerfileContext>
|
|
||||||
<GenerateDocumentationFile>True</GenerateDocumentationFile>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<Compile Remove="log\**" />
|
|
||||||
<Content Remove="log\**" />
|
|
||||||
<EmbeddedResource Remove="log\**" />
|
|
||||||
<None Remove="log\**" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<PackageReference Include="Kurisu.AspNetCore" Version="0.9.11" />
|
|
||||||
</ItemGroup>
|
|
||||||
</Project>
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.
|
|
||||||
|
|
||||||
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
|
|
||||||
WORKDIR /app
|
|
||||||
EXPOSE 80
|
|
||||||
|
|
||||||
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
|
|
||||||
WORKDIR /src
|
|
||||||
COPY ["Src/Dlhis.User/Dlhis.User.csproj", "Src/Dlhis.User/"]
|
|
||||||
RUN dotnet restore "Src/Dlhis.User/Dlhis.User.csproj"
|
|
||||||
COPY . .
|
|
||||||
WORKDIR "/src/Src/Dlhis.User"
|
|
||||||
RUN dotnet build "Dlhis.User.csproj" -c Release -o /app/build
|
|
||||||
|
|
||||||
FROM build AS publish
|
|
||||||
RUN dotnet publish "Dlhis.User.csproj" -c Release -o /app/publish /p:UseAppHost=false
|
|
||||||
|
|
||||||
FROM base AS final
|
|
||||||
WORKDIR /app
|
|
||||||
COPY --from=publish /app/publish .
|
|
||||||
ENTRYPOINT ["dotnet", "Dlhis.User.dll"]
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
using Kurisu.AspNetCore.Startup;
|
|
||||||
using Microsoft.IdentityModel.Logging;
|
|
||||||
|
|
||||||
namespace Dlhis.User
|
|
||||||
{
|
|
||||||
class Program
|
|
||||||
{
|
|
||||||
static void Main(string[] args)
|
|
||||||
{
|
|
||||||
KurisuHost.Run<Startup>(args);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class Startup : DefaultStartup
|
|
||||||
{
|
|
||||||
public Startup(IConfiguration configuration) : base(configuration)
|
|
||||||
{
|
|
||||||
IdentityModelEventSource.ShowPII = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
{
|
|
||||||
"profiles": {
|
|
||||||
"Dlhis.User": {
|
|
||||||
"commandName": "Project",
|
|
||||||
"environmentVariables": {
|
|
||||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
|
||||||
},
|
|
||||||
"dotnetRunMessages": true,
|
|
||||||
"applicationUrl": "http://localhost:5004"
|
|
||||||
},
|
|
||||||
"Docker": {
|
|
||||||
"commandName": "Docker",
|
|
||||||
"launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}",
|
|
||||||
"environmentVariables": {
|
|
||||||
"ASPNETCORE_URLS": "http://+:80"
|
|
||||||
},
|
|
||||||
"publishAllPorts": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"$schema": "https://json.schemastore.org/launchsettings.json"
|
|
||||||
}
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
{
|
|
||||||
"Logging": {
|
|
||||||
"LogLevel": {
|
|
||||||
"Default": "Information",
|
|
||||||
"Microsoft.AspNetCore": "Warning"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"InternalRequest": {
|
|
||||||
"CommonRequestUrl": "http://localhost:5001"
|
|
||||||
},
|
|
||||||
"SwaggerOptions": {
|
|
||||||
"Enable": true,
|
|
||||||
"Authority": "https://yikatong.isawesome.cn/oauth2",
|
|
||||||
"ClientId": "4fb184324eac4180",
|
|
||||||
"ClientSecret": "8ac8f235152f1524",
|
|
||||||
"Scopes": {
|
|
||||||
"openid": "openid",
|
|
||||||
"profile": "profile",
|
|
||||||
"yikatong": "yikatong"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"IdentityServerOptions": {
|
|
||||||
"Authority": "https://yikatong.isawesome.cn/oauth2",
|
|
||||||
"RequireHttpsMetadata": true,
|
|
||||||
"Issuer": "identity.isawesome.cn",
|
|
||||||
"Audience": "",
|
|
||||||
"Pat": {
|
|
||||||
"Enable": false,
|
|
||||||
"Scheme": "token",
|
|
||||||
"ClientId": "reference",
|
|
||||||
"ClientSecret": "123456"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,65 +0,0 @@
|
|||||||
{
|
|
||||||
"Logging": {
|
|
||||||
"LogLevel": {
|
|
||||||
"Default": "Information",
|
|
||||||
"Microsoft.AspNetCore": "Warning"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"AllowedHosts": "*",
|
|
||||||
|
|
||||||
"SqlSugarOptions": {
|
|
||||||
"DefaultConnectionString": "server=192.168.199.124;port=3306;userid=root;password=dlhis123;database=identity;charset=utf8mb4;",
|
|
||||||
"SlaveConnectionString": [],
|
|
||||||
"Timeout": 30,
|
|
||||||
"SlowSqlTime": 1,
|
|
||||||
"EnableSqlLog": false
|
|
||||||
},
|
|
||||||
"SwaggerOptions": {
|
|
||||||
"Enable": true,
|
|
||||||
"Authority": "http://identity.oauth.svc.cluster.local",
|
|
||||||
"ClientId": "4fb184324eac4180",
|
|
||||||
"ClientSecret": "8ac8f235152f1524",
|
|
||||||
"Scopes": {
|
|
||||||
"openid": "openid",
|
|
||||||
"profile": "profile",
|
|
||||||
"yikatong": "yikatong"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"IdentityServerOptions": {
|
|
||||||
"Authority": "http://identity.oauth.svc.cluster.local",
|
|
||||||
"RequireHttpsMetadata": false,
|
|
||||||
"Issuer": "identity.isawesome.cn",
|
|
||||||
"Audience": "",
|
|
||||||
"Pat": {
|
|
||||||
"Enable": false,
|
|
||||||
"Scheme": "token",
|
|
||||||
"ClientId": "reference",
|
|
||||||
"ClientSecret": "123456"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Serilog": {
|
|
||||||
"MinimumLevel": {
|
|
||||||
"Default": "Information",
|
|
||||||
"Override": {
|
|
||||||
"System": "Warning",
|
|
||||||
"Microsoft": "Warning",
|
|
||||||
"Microsoft.Hosting.Lifetime": "Information"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"WriteTo": [
|
|
||||||
{
|
|
||||||
"Name": "Async",
|
|
||||||
"Args": {
|
|
||||||
"configure": [
|
|
||||||
{
|
|
||||||
"Name": "Console",
|
|
||||||
"Args": {
|
|
||||||
"outputTemplate": "[{Timestamp:HH:mm:ss} {Level:u3}] [{SourceContext}] {Message:lj}{NewLine}{Exception}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user