Merge branch 'refs/heads/development'
This commit is contained in:
@@ -21,8 +21,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Scheduled", "Scheduled", "{
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Dlhis.Basic", "Src\Dlhis.Basic\Dlhis.Basic.csproj", "{D1F81CB7-F3EF-4196-A751-468248368020}"
|
||||
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}"
|
||||
EndProject
|
||||
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}.Release|Any CPU.ActiveCfg = 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.Build.0 = Debug|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}
|
||||
{FD8D38C5-0827-49D1-A0BA-7707FBFDA2EC} = {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}
|
||||
{85A345C7-913E-4C1B-BE1C-600DE408A02F} = {57074FD8-1A2F-40C7-8476-001778A3F65D}
|
||||
{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.Services;
|
||||
using Kurisu.AspNetCore.DataAccess.SqlSugar.Aop;
|
||||
using Kurisu.AspNetCore.UnifyResultAndValidation;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
namespace Dlhis.Middle.Controllers;
|
||||
@@ -15,11 +14,11 @@ namespace Dlhis.Middle.Controllers;
|
||||
[ApiController]
|
||||
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>
|
||||
@@ -31,6 +30,6 @@ public class OrdersController : ControllerBase
|
||||
[IgnoreTenant]
|
||||
public async Task<DefaultApiResult<OrderResultResponse>> AddAsync(OrderAddRequest request)
|
||||
{
|
||||
return await _orderService.AddAsync(request);
|
||||
return await _canteenApi.AddAsync(request);
|
||||
}
|
||||
}
|
||||
@@ -17,6 +17,7 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Kurisu.RemoteCall" Version="0.4.2" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="8.0.6" />
|
||||
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.19.5" />
|
||||
<PackageReference Include="SQLitePCLRaw.bundle_e_sqlcipher" Version="2.1.8" />
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
using Dlhis.Entity.Device.Enums;
|
||||
using Kurisu.AspNetCore.Utils.Extensions;
|
||||
|
||||
namespace Dlhis.ScheduledTask.TaskAssignment.Response;
|
||||
namespace Dlhis.Middle.Dto;
|
||||
|
||||
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.Implements;
|
||||
using Kurisu.AspNetCore;
|
||||
using Kurisu.AspNetCore.Startup;
|
||||
using Microsoft.IdentityModel.Logging;
|
||||
|
||||
@@ -23,6 +24,8 @@ public class Startup : DefaultStartup
|
||||
public override void ConfigureServices(IServiceCollection services)
|
||||
{
|
||||
base.ConfigureServices(services);
|
||||
|
||||
services.AddRemoteCall(App.ActiveTypes);
|
||||
services.AddHttpClient("face").ConfigurePrimaryHttpMessageHandler(() =>
|
||||
{
|
||||
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;
|
||||
|
||||
namespace Dlhis.ScheduledTask.TaskAssignment.Response;
|
||||
namespace Dlhis.ScheduledTask.TaskAssignment.Dto;
|
||||
|
||||
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>
|
||||
/// 设备任务
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
namespace Dlhis.ScheduledTask.TaskAssignment.Response;
|
||||
using Dlhis.ScheduledTask.TaskAssignment.Dto;
|
||||
|
||||
namespace Dlhis.ScheduledTask.TaskAssignment.Response;
|
||||
|
||||
public class ScheduleToDeviceResponse
|
||||
{
|
||||
|
||||
@@ -14,6 +14,11 @@ public class UserToDeviceResponse
|
||||
/// </summary>
|
||||
public string UserNo { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 老系统档案号
|
||||
/// </summary>
|
||||
public string OldUserNo { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 人员学工号
|
||||
/// </summary>
|
||||
|
||||
@@ -51,7 +51,7 @@ public class AssignmentService : IAssignmentService
|
||||
var dc = x.Key.DeviceConnectionInfo ?? "{}";
|
||||
var func = x.Key.FuncStr ?? "[]";
|
||||
|
||||
var jobj = new JObject
|
||||
var jObj = new JObject
|
||||
{
|
||||
{ "connectionInfo", JToken.Parse(dc) },
|
||||
{ "function", JArray.Parse(func) }
|
||||
@@ -61,7 +61,7 @@ public class AssignmentService : IAssignmentService
|
||||
{
|
||||
Brand = b,
|
||||
DeviceUniqueNo = d,
|
||||
DeviceInfo = jobj,
|
||||
DeviceInfo = jObj,
|
||||
Tasks = x.Select(item =>
|
||||
{
|
||||
var key = $"face:{item.UserCode}";
|
||||
@@ -83,7 +83,7 @@ public class AssignmentService : IAssignmentService
|
||||
{
|
||||
dto.Info = new UserToDeviceResponse
|
||||
{
|
||||
UserId = item.UserId.HasValue ? item.UserId.Value : 0,
|
||||
UserId = item.UserId ?? 0,
|
||||
UserNo = item.UserNo,
|
||||
UserCode = item.UserCode,
|
||||
UserName = item.UserName,
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
using System.Text;
|
||||
using Dlhis.User.Identity.Request;
|
||||
using Dlhis.Sys.Identity.Request;
|
||||
using Kurisu.AspNetCore.Authentication.Options;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.Extensions.Options;
|
||||
using Newtonsoft.Json.Linq;
|
||||
|
||||
namespace Dlhis.User.Identity.Controllers;
|
||||
namespace Dlhis.Sys.Identity.Controllers;
|
||||
|
||||
/// <summary>
|
||||
/// OAuth2认证
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace Dlhis.User.Identity.Request;
|
||||
namespace Dlhis.Sys.Identity.Request;
|
||||
|
||||
public class ClientGrantRequest
|
||||
{
|
||||
@@ -91,30 +91,30 @@ public class MenuService : IMenuService
|
||||
.Select(x => x.Code)
|
||||
.ToListAsync();
|
||||
|
||||
var menus = await GetListAsync(PlatformEnumType.PCAdmin);
|
||||
|
||||
foreach (var menu in menus)
|
||||
{
|
||||
RecursionHandler(menu, permissionCodes, permissionCodes.Contains(menu.Code));
|
||||
}
|
||||
// var menus = await GetListAsync(PlatformEnumType.PCAdmin);
|
||||
//
|
||||
// foreach (var menu in menus)
|
||||
// {
|
||||
// RecursionHandler(menu, permissionCodes, permissionCodes.Contains(menu.Code));
|
||||
// }
|
||||
|
||||
return permissionCodes;
|
||||
|
||||
static bool RecursionHandler(MenuResponse current, List<string> innerPermissions, bool add)
|
||||
{
|
||||
if (add) innerPermissions.Add(current.Code);
|
||||
|
||||
foreach (var menu in current.Items)
|
||||
{
|
||||
var currentAdd = RecursionHandler(menu, innerPermissions, add || innerPermissions.Contains(menu.Code));
|
||||
if (currentAdd && !innerPermissions.Contains(current.Code))
|
||||
{
|
||||
innerPermissions.Add(current.Code);
|
||||
}
|
||||
}
|
||||
|
||||
return add;
|
||||
}
|
||||
// static bool RecursionHandler(MenuResponse current, List<string> innerPermissions, bool add)
|
||||
// {
|
||||
// if (add) innerPermissions.Add(current.Code);
|
||||
//
|
||||
// foreach (var menu in current.Items)
|
||||
// {
|
||||
// var currentAdd = RecursionHandler(menu, innerPermissions, add || innerPermissions.Contains(menu.Code));
|
||||
// if (currentAdd && !innerPermissions.Contains(current.Code))
|
||||
// {
|
||||
// innerPermissions.Add(current.Code);
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// return add;
|
||||
// }
|
||||
}
|
||||
|
||||
public async Task<List<string>> GetAllAssignmentPermissionsAsync()
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using Kurisu.AspNetCore.Startup;
|
||||
|
||||
namespace Dlhis.User.Packs;
|
||||
namespace Dlhis.Sys.Packs;
|
||||
|
||||
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