diff --git a/Src/Dlhis.Basic.Api/Dto/DishesMenuDetailDto.cs b/Src/Dlhis.Basic.Api/Dto/DishesMenuDetailDto.cs
deleted file mode 100644
index 4e5addef..00000000
--- a/Src/Dlhis.Basic.Api/Dto/DishesMenuDetailDto.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-namespace Dlhis.Basic.Api.Dto;
-
-public class DishesMenuDetailDto
-{
- public DateTime Date { get; set; }
-
- public long MenuId { get; set; }
-
- public long DishesId { get; set; }
-
- public string DishesCode { get; set; }
-
- public string DishesName { get; set; }
-
- public decimal Price { get; set; }
-
- public int Number { get; set; }
-
- public int Version { get; set; }
-}
diff --git a/Src/Dlhis.Basic.Api/IDeviceGroupApi.cs b/Src/Dlhis.Basic.Api/IDeviceGroupApi.cs
deleted file mode 100644
index cd23e83d..00000000
--- a/Src/Dlhis.Basic.Api/IDeviceGroupApi.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-using Dlhis.Basic.Api.Response;
-using Kurisu.RemoteCall.Attributes;
-using Kurisu.RemoteCall.Default;
-
-namespace Dlhis.Basic.Api;
-
-
-[EnableRemoteClient(Name = "basic-service", BaseUrl = "${InternalRequest:BasicRequestUrl}")]
-public interface IDeviceGroupApi
-{
-
- ///
- /// 获取分组下的设备
- ///
- ///
- ///
- [Auth]
- [Get("/api/deviceGroups/devices")]
- Task>> GetDevicesByCodeAsync(Guid code);
-}
diff --git a/Src/Dlhis.Basic.Api/IDevicePermissionApi.cs b/Src/Dlhis.Basic.Api/IDevicePermissionApi.cs
deleted file mode 100644
index 09b76de1..00000000
--- a/Src/Dlhis.Basic.Api/IDevicePermissionApi.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using Dlhis.Basic.Api.Dto;
-using Dlhis.Basic.Api.Request;
-using Kurisu.RemoteCall.Attributes;
-using Kurisu.RemoteCall.Default;
-
-namespace Dlhis.Basic.Api;
-
-[EnableRemoteClient(Name = "basic-service", BaseUrl = "${InternalRequest:BasicRequestUrl}")]
-public interface IDevicePermissionApi
-{
- ///
- /// 获取所有人的权限信息
- ///
- ///
- [Post("/api/devicepermissions/all-permission")]
- Task> GetPermissionUsersInfoAsync(List userNos);
-
- ///
- /// 重新生成权限
- ///
- ///
- ///
- [Post("/api/devicepermissions/re-permission")]
- Task> RePermissionUsersInfoAsync(PermissionUsersInfoDto beforeDto);
-}
\ No newline at end of file
diff --git a/Src/Dlhis.Basic.Api/IDishesMenuApi.cs b/Src/Dlhis.Basic.Api/IDishesMenuApi.cs
deleted file mode 100644
index 66cdecb3..00000000
--- a/Src/Dlhis.Basic.Api/IDishesMenuApi.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-using Dlhis.Basic.Api.Dto;
-using Kurisu.RemoteCall.Attributes;
-using Kurisu.RemoteCall.Default;
-
-namespace Dlhis.Basic.Api;
-
-[EnableRemoteClient(Name = "basic-service", BaseUrl = "${InternalRequest:BasicRequestUrl}")]
-public interface IDishesMenuApi
-{
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- [Auth]
- [Get("/api/dishesMenus/checkdetail")]
- Task> GetBookingDishesDetailAsync(DateTime date, Guid businessPlaceCode, int shiftType, string dishesCode);
-}
\ No newline at end of file
diff --git a/Src/Dlhis.Basic.Api/IGainfoPermissionApi.cs b/Src/Dlhis.Basic.Api/IGainfoPermissionApi.cs
index 686ca839..e3ff75cb 100644
--- a/Src/Dlhis.Basic.Api/IGainfoPermissionApi.cs
+++ b/Src/Dlhis.Basic.Api/IGainfoPermissionApi.cs
@@ -9,4 +9,8 @@ public interface IGainfoPermissionApi
{
[Post("/api/gainfoPermissions/reset")]
Task ResetAsync(GainfoPermissionResetRequest request);
+
+ [Auth]
+ [Get("/api/devicePermissions/userPermissionCodes")]
+ Task>> GetPermissionsDeviceCodesAsync(string userCode);
}
\ No newline at end of file
diff --git a/Src/Dlhis.Basic.Api/Request/GeneratePermissionIdRequest.cs b/Src/Dlhis.Basic.Api/Request/GeneratePermissionIdRequest.cs
deleted file mode 100644
index b507e53c..00000000
--- a/Src/Dlhis.Basic.Api/Request/GeneratePermissionIdRequest.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-namespace Dlhis.Basic.Api.Request
-{
- public class GeneratePermissionIdRequest
- {
- public long Id { get; set; }
- }
-}
\ No newline at end of file
diff --git a/Src/Dlhis.Basic.Api/Response/DeviceUnderGroupResponse.cs b/Src/Dlhis.Basic.Api/Response/DeviceUnderGroupResponse.cs
deleted file mode 100644
index a2e8a5ea..00000000
--- a/Src/Dlhis.Basic.Api/Response/DeviceUnderGroupResponse.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-namespace Dlhis.Basic.Api.Response;
-
-public class DeviceUnderGroupResponse
-{
- public Guid Code { get; set; }
-
- ///
- /// 设备唯一码,IP/MAC/SNO
- ///
- public string UniqueNo { get; set; }
-
- ///
- /// 品牌
- ///
- public string Brand { get; set; }
-
- ///
- /// 是否启用
- ///
- public bool Enable { get; set; }
-}
diff --git a/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs b/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs
index 7418fafc..834c46c9 100644
--- a/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs
+++ b/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs
@@ -84,29 +84,12 @@ public class DevicePermissionsController : ControllerBase
return await _devicePermissionService.GetGainfoPageByDeviceAsync(request);
}
- ///
- /// 获取当前所有人的权限code
- ///
- ///
- [AllowAnonymous]
- [HttpPost("all-permission")]
- [IgnoreTenant]
- public async Task GetPermissionUsersInfoAsync(List userNos)
- {
- return await _devicePermissionService.GetPermissionUsersInfoAsync(userNos);
- }
- ///
- /// 根据权限code生成下发任务
- ///
- ///
- ///
- [AllowAnonymous]
+ [HttpGet("userPermissionCodes")]
[IgnoreTenant]
- [HttpPost("re-permission")]
- public async Task ReGeneratePermissionUsersInfoAsync(PermissionUsersInfoDto beforeDto)
+ public async Task> GetAssignDeviceCodesAsync(string userCode)
{
- return await _devicePermissionService.ReGeneratePermissionUsersInfoAsync(beforeDto);
+ return await _devicePermissionService.GetAssignDeviceCodesAsync(userCode);
}
[AllowAnonymous]
diff --git a/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs b/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs
index 612d4c2e..deb9d1d5 100644
--- a/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs
+++ b/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs
@@ -56,13 +56,9 @@ public interface IDevicePermissionService : IScopeDependency
///
/// 获取用户所有设备权限
///
- ///
+ ///
///
- Task> GetAssignDeviceCodesAsync(string userNo);
-
- Task GetPermissionUsersInfoAsync(List userNos);
-
- Task ReGeneratePermissionUsersInfoAsync(PermissionUsersInfoDto beforeDto);
+ Task> GetAssignDeviceCodesAsync(string userCode);
Task> GetGainfoPageByDeviceAsync(DeviceWithGainfoRequest request);
}
\ No newline at end of file
diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs
index 333e1507..c9bb65d8 100644
--- a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs
+++ b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs
@@ -300,100 +300,6 @@ public class DevicePermissionService : IDevicePermissionService
}
}
- public async Task GetPermissionUsersInfoAsync(List userNos)
- {
- if (userNos.IsEmpty())
- userNos = await GetPermissionUserNosAsync();
-
- var permissions = await GetAssignDeviceCodesInternalAsync(userNos);
-
- return new PermissionUsersInfoDto
- {
- UserNos = userNos,
- PermissionInfos = permissions
- };
- }
-
-
- public async Task ReGeneratePermissionUsersInfoAsync(PermissionUsersInfoDto beforeDto)
- {
- var userNos = beforeDto.UserNos;
- var before = beforeDto.PermissionInfos.ToDictionary(x => x.Key, x => x.Value, StringComparer.OrdinalIgnoreCase);
-
- var current = await GetAssignDeviceCodesInternalAsync(userNos);
-
- var devices = await _dbContext.Queryable().Where(x => x.Enable).ToListAsync();
- var waitTasks = new List();
-
- foreach (var userNo in userNos)
- {
- before.TryGetValue(userNo, out var beforeTenantDeviceCodes);
- beforeTenantDeviceCodes ??= new List();
- current.TryGetValue(userNo, out var currentTenantDeviceCodes);
- currentTenantDeviceCodes ??= new List();
-
- var tenants = new HashSet();
- foreach (var item in beforeTenantDeviceCodes)
- tenants.Add(item.Tenant);
- foreach (var item in currentTenantDeviceCodes)
- tenants.Add(item.Tenant);
-
- foreach (var tenant in tenants)
- {
- var currentCodes = currentTenantDeviceCodes.FirstOrDefault(x => x.Tenant == tenant)?.Codes ?? new List();
- var beforeCodes = beforeTenantDeviceCodes.FirstOrDefault(x => x.Tenant == tenant)?.Codes ?? new List();
-
- //被删除
- var deletedItems = beforeCodes.Where(x => !currentCodes.Contains(x)).ToList();
- //新增
- var addItems = currentCodes.Where(x => !beforeCodes.Contains(x)).ToList();
-
- if (!deletedItems.Any() && !addItems.Any())
- {
- continue;
- }
-
- var deviceCodes = devices.Where(x => deletedItems.Contains(x.Code) || addItems.Contains(x.Code)).Select(x => x.Code).ToList();
- deletedItems = deletedItems.Where(x => deviceCodes.Contains(x)).ToList();
- addItems = addItems.Where(x => deviceCodes.Contains(x)).ToList();
-
- //下发任务创建
- deletedItems.ForEach(x => waitTasks.Add(new DeviceTaskEntity
- {
- DeviceUniqueNo = devices.First(item => item.Code == x).UniqueNo,
- Status = DeviceTaskStatusEnumType.Wait,
- Type = DeviceTaskEnumType.Delete,
- CancellationId = 0,
- DeviceType = devices.First(item => item.Code == x).Type,
- UserNo = userNo,
- Version = 0,
- TenantId = tenant,
- Source = DeviceTaskSourceEnumType.Schedule
- }));
-
- addItems.ForEach(x => waitTasks.Add(new DeviceTaskEntity
- {
- DeviceUniqueNo = devices.First(item => item.Code == x).UniqueNo,
- Status = DeviceTaskStatusEnumType.Wait,
- Type = DeviceTaskEnumType.Add,
- DeviceType = devices.First(item => item.Code == x).Type,
- UserNo = userNo,
- Version = 0,
- TenantId = tenant,
- Source = DeviceTaskSourceEnumType.Schedule
- }));
- }
- }
-
- if (waitTasks.Any())
- {
- await _dbContext.InsertAsync(waitTasks);
- }
-
- return waitTasks.Count;
- }
-
-
public async Task> GetGainfoPageByDeviceAsync(DeviceWithGainfoRequest request)
{
var device = await _dbContext.Queryable().Where(x => x.UniqueNo == request.DeviceUniqueNo).SingleAsync();
@@ -536,44 +442,13 @@ public class DevicePermissionService : IDevicePermissionService
///
/// 获取用户所有设备权限
///
- ///
+ ///
///
- public async Task> GetAssignDeviceCodesAsync(string userNo)
+ public async Task> GetAssignDeviceCodesAsync(string userCode)
{
- var devices = await _dbContext.Queryable().Where(x => x.Enable).ToListAsync();
- var deviceRegistries = await _dbContext.Queryable().Where(x => !SqlFunc.IsNullOrEmpty(x.BusinessPlaceCode)).ToListAsync();
-
- var gainfo = await _dbContext.Queryable().Where(x => x.No == userNo).SingleAsync()
- ?? await _dbContext.Queryable().AS("GainfoLeave").Where(x => x.No == userNo).SingleAsync();
-
- var gainfoGroups = await _dbContext.Queryable().ToListAsync();
-
- var devicePermissions = await _dbContext.Queryable().ToListAsync();
- var deviceGroups = await _dbContext.Queryable().ToListAsync();
- var deviceGroupCodes = deviceGroups.Select(x => x.Code).ToList();
- var deviceRelationships = await _dbContext.Queryable().Where(x => deviceGroupCodes.Contains(x.GroupCode)).ToListAsync();
- var departments = await _dbContext.Queryable().ToListAsync();
-
-
- var isOutsource = await _dbContext.Queryable().AnyAsync(x => x.Code == gainfo.Code);
-
- var enableFactoryPermissions = await _dbContext.Queryable().ToListAsync();
-
- var gainfoDto = new GainfoDto
- {
- Id = gainfo.Id,
- No = gainfo.No,
- Code = gainfo.Code,
- Name = gainfo.Name,
- Workplace = gainfo.Workplace,
- Factory = gainfo.Factory,
- DepartmentNo = gainfo.DepartmentNo,
- IsOutsource = isOutsource,
- EnableFactoryPermission = enableFactoryPermissions.FirstOrDefault(x => x.TenantId == gainfo.Factory)?.EnableOutsourceDown ?? true
- };
-
- var result = GetAssignDeviceCodesInternal(gainfoDto, gainfoGroups, devicePermissions, deviceGroups, deviceRelationships, deviceRegistries, devices, departments);
- return result.SelectMany(x => x.Codes).ToList();
+ var userNo = await _dbContext.Queryable().Where(x => x.Code == userCode || x.No == userCode).Select(x => x.No).SingleAsync();
+ var result = await GetAssignDeviceCodesInternalAsync(new List { userNo });
+ return result.First().Value.SelectMany(x => x.Codes).ToList();
}
//************************************************ help methods *******************************************************
diff --git a/Src/Dlhis.ScheduledTask/Common/Services/ISapBusinessTripService.cs b/Src/Dlhis.Basic/Organization/Services/ISapBusinessTripService.cs
similarity index 72%
rename from Src/Dlhis.ScheduledTask/Common/Services/ISapBusinessTripService.cs
rename to Src/Dlhis.Basic/Organization/Services/ISapBusinessTripService.cs
index 183f3278..c2d24a10 100644
--- a/Src/Dlhis.ScheduledTask/Common/Services/ISapBusinessTripService.cs
+++ b/Src/Dlhis.Basic/Organization/Services/ISapBusinessTripService.cs
@@ -1,4 +1,4 @@
-namespace Dlhis.ScheduledTask.Common.Services;
+namespace Dlhis.Basic.Organization.Services;
public interface ISapBusinessTripService : IScopeDependency
{
diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoPermissionService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoPermissionService.cs
index bd76cf19..89cec74a 100644
--- a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoPermissionService.cs
+++ b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoPermissionService.cs
@@ -40,7 +40,7 @@ public class GainfoPermissionService : IGainfoPermissionService
}
//用户所有deviceCode权限
- var deviceCodes = await _devicePermissionService.GetAssignDeviceCodesAsync(gainfo.No);
+ var deviceCodes = await _devicePermissionService.GetAssignDeviceCodesAsync(gainfo.Code);
return await _dbContext.Queryable()
.LeftJoin((x, dr) => x.UniqueNo == dr.DeviceUniqueNo)
@@ -164,7 +164,7 @@ public class GainfoPermissionService : IGainfoPermissionService
gainfo.ThrowIfNull("档案数据不存在");
//获取人员的设备权限
- var deviceCodes = await _devicePermissionService.GetAssignDeviceCodesAsync(request.UserNo);
+ var deviceCodes = await _devicePermissionService.GetAssignDeviceCodesAsync(gainfo!.Code);
var devices = await _dbContext.Queryable().Where(x => deviceCodes.Contains(x.Code)).ToListAsync();
var tasks = devices.Select(x => new DeviceTaskEntity
diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs
index ad8f6cfa..addbeae6 100644
--- a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs
+++ b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs
@@ -292,7 +292,7 @@ public class GainfoService : IGainfoService
await _dbContext.UpdateAsync(gainfo);
- var deviceCodes = await _devicePermissionService.GetAssignDeviceCodesAsync(gainfo.No);
+ var deviceCodes = await _devicePermissionService.GetAssignDeviceCodesAsync(gainfo.Code);
var dhDevices = await _dbContext.Queryable().LeftJoin((x, xt) => x.TemplateCode == xt.Code)
.Where((x, xt) => xt.Name == "大华人脸机")
diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/SapBusinessTripService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/SapBusinessTripService.cs
new file mode 100644
index 00000000..c587e8ac
--- /dev/null
+++ b/Src/Dlhis.Basic/Organization/Services/Implements/SapBusinessTripService.cs
@@ -0,0 +1,139 @@
+// using Dlhis.Entity.Basic.Entity;
+// using Dlhis.Entity.Device.Entities;
+// using Dlhis.Entity.Device.Enums;
+// using Dlhis.Entity.Sys.Entities;
+// using Dlhis.Entity.Sys.Enums;
+// using Dlhis.Entity.Visitor.Entity;
+// using Dlhis.Entity.Visitor.Enums;
+// using Kurisu.AspNetCore.DataAccess.SqlSugar.Services;
+// using SqlSugar;
+//
+// namespace Dlhis.Basic.Organization.Services.Implements;
+//
+// public class SapBusinessTripService : ISapBusinessTripService
+// {
+// private readonly IJinkoJipService _jinkoJipService;
+// private readonly IDbContext _dbContext;
+// private readonly ILogger _logger;
+//
+// public SapBusinessTripService(IJinkoJipService jinkoJipService, IDbContext dbContext , ILogger logger)
+// {
+// _jinkoJipService = jinkoJipService;
+// _dbContext = dbContext;
+// _logger = logger;
+// }
+//
+// ///
+// public async Task HandlerBusinessTripsByFactoryAsync(string factory)
+// {
+// var today = DateTime.Today;
+// var yesterday = today.AddDays(-1);
+//
+// try
+// {
+// var tripResponse = await _jinkoJipService.GetTravelInfosByFactoryAsync(today, today, factory);
+// if (!tripResponse.Items.Any())
+// {
+// return;
+// }
+//
+// foreach (var tripInfoItem in tripResponse.Items.Where(x => x.Destination.IsPresent()))
+// {
+// if (await _dbContext.Queryable().Where(x => x.Code == tripInfoItem.Code
+// && x.BeginDate == tripInfoItem.BeginDate
+// && x.EndDate == tripInfoItem.EndDate
+// && x.Destination == factory).AnyAsync())
+// {
+// continue;
+// }
+//
+// var entity = tripInfoItem.Adapt();
+// entity.Status = BusinessTripStatusEnumType.Wait;
+// await _dbContext.InsertAsync(entity);
+// }
+//
+// //获取今天和昨天的出差数据
+// var tripInfos = await _dbContext.Queryable()
+// .Where(x => (SqlFunc.DateIsSame(x.BeginDate, today) && SqlFunc.DateIsSame(x.BeginDate, today))
+// || (SqlFunc.DateIsSame(x.BeginDate, yesterday) && SqlFunc.DateIsSame(x.BeginDate, yesterday)))
+// .Where(x => !SqlFunc.IsNullOrEmpty(x.Destination))
+// .Where(x => x.Destination == factory)
+// .ToListAsync();
+//
+// //获取分组信息
+// var tripGroup = await _dbContext.Queryable()
+// .Where(x => x.Type == DeviceTypeEnumType.Door)
+// .Where(x => x.TenantId == factory)
+// .Where(x => x.IsBusinessTrip)
+// .SingleAsync();
+//
+// var userCodes = tripInfos.Select(x => x.Code).Distinct().ToList();
+// var gainfos = await _dbContext.Queryable().Where(x => userCodes.Contains(x.Code)).ToListAsync();
+//
+// foreach (var gainfo in gainfos)
+// {
+// try
+// {
+// var myTripInfos = tripInfos.Where(x => x.Code == gainfo.Code).ToList();
+//
+// var yesterdayTripInfo = myTripInfos.FirstOrDefault(x => x.BeginDate == yesterday && x.EndDate == yesterday); //昨天出差数据
+// var todayTripInfo = myTripInfos.FirstOrDefault(x => x.BeginDate == today && x.EndDate == today); //今天出差数据
+//
+// //都为空不处理
+// if (yesterdayTripInfo == null && todayTripInfo == null) continue;
+//
+// //都不为空则更新数据状态
+// if (yesterdayTripInfo != null && todayTripInfo != null)
+// {
+// todayTripInfo.Status = BusinessTripStatusEnumType.Generated;
+// await _dbContext.UpdateAsync(todayTripInfo);
+// continue;
+// }
+//
+// var beforeResult = await _devicePermissionApi.GetPermissionUsersInfoAsync(new List { gainfo.Code });
+//
+// if (yesterdayTripInfo != null)
+// {
+// yesterdayTripInfo.Status = BusinessTripStatusEnumType.Deleted;
+// await _dbContext.Updateable()
+// .SetColumns(x => x.IsDeleted == true)
+// .Where(x => x.AssignType == AssignTypeEnumType.User)
+// .Where(x => x.AssignValue == gainfo.No)
+// .Where(x => x.UniqueType == DeviceAssignmentTypeEnumType.Group)
+// .Where(x => x.UniqueValue == tripGroup.Code)
+// .Where(x => x.Type == tripGroup.Type)
+// .Where(x => x.TenantId == factory)
+// .ExecuteCommandAsync();
+// await _dbContext.UpdateAsync(yesterdayTripInfo);
+// }
+//
+// if (yesterdayTripInfo == null)
+// {
+// todayTripInfo.Status = BusinessTripStatusEnumType.Generated;
+// await _dbContext.InsertAsync(new DevicePermissionEntity
+// {
+// AssignType = AssignTypeEnumType.User,
+// AssignValue = gainfo.No,
+// UniqueType = DeviceAssignmentTypeEnumType.Group,
+// UniqueValue = tripGroup.Code,
+// TenantId = factory,
+// Type = tripGroup.Type,
+// IsDeleted = false
+// });
+// await _dbContext.UpdateAsync(todayTripInfo);
+// }
+//
+// await _devicePermissionApi.RePermissionUsersInfoAsync(beforeResult.Data);
+// }
+// catch (Exception e)
+// {
+// _logger.LogError(e, "出差自动下发任务失败:{message}", e.Message);
+// }
+// }
+// }
+// catch (Exception e)
+// {
+// _logger.LogError(e, "处理{factory}出差数据失败:{message}", factory, e.Message);
+// }
+// }
+// }
\ No newline at end of file
diff --git a/Src/Dlhis.Canteen/Dlhis.Canteen.csproj b/Src/Dlhis.Canteen/Dlhis.Canteen.csproj
index 0c6bb0f3..f893a588 100644
--- a/Src/Dlhis.Canteen/Dlhis.Canteen.csproj
+++ b/Src/Dlhis.Canteen/Dlhis.Canteen.csproj
@@ -16,6 +16,10 @@
+
+
+
+
diff --git a/Src/Dlhis.Canteen/Dockerfile b/Src/Dlhis.Canteen/Dockerfile
index f9585740..dcac8e9d 100644
--- a/Src/Dlhis.Canteen/Dockerfile
+++ b/Src/Dlhis.Canteen/Dockerfile
@@ -1,23 +1,31 @@
-#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.
+# 请参阅 https://aka.ms/customizecontainer 以了解如何自定义调试容器,以及 Visual Studio 如何使用此 Dockerfile 生成映像以更快地进行调试。
+# 此阶段用于在快速模式(默认为调试配置)下从 VS 运行时
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
+
+# 此阶段用于生成服务项目
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
+ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["Src/Dlhis.Canteen/Dlhis.Canteen.csproj", "Src/Dlhis.Canteen/"]
COPY ["Src/Dlhis.Basic.Api/Dlhis.Basic.Api.csproj", "Src/Dlhis.Basic.Api/"]
COPY ["Src/Dlhis.Entity/Dlhis.Entity.csproj", "Src/Dlhis.Entity/"]
+COPY ["Src/Dlhis.DataPermission.Model/Dlhis.DataPermission.Model.csproj", "Src/Dlhis.DataPermission.Model/"]
COPY ["Src/Dlhis.Sys.Api/Dlhis.Sys.Api.csproj", "Src/Dlhis.Sys.Api/"]
-RUN dotnet restore "Src/Dlhis.Canteen/Dlhis.Canteen.csproj"
+RUN dotnet restore "./Src/Dlhis.Canteen/Dlhis.Canteen.csproj"
COPY . .
WORKDIR "/src/Src/Dlhis.Canteen"
-RUN dotnet build "Dlhis.Canteen.csproj" -c Release -o /app/build
+RUN dotnet build "./Dlhis.Canteen.csproj" -c $BUILD_CONFIGURATION -o /app/build
+# 此阶段用于发布要复制到最终阶段的服务项目
FROM build AS publish
-RUN dotnet publish "Dlhis.Canteen.csproj" -c Release -o /app/publish /p:UseAppHost=false
+ARG BUILD_CONFIGURATION=Release
+RUN dotnet publish "./Dlhis.Canteen.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false
+# 此阶段在生产中使用,或在常规模式下从 VS 运行时使用(在不使用调试配置时为默认值)
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
diff --git a/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs b/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs
index ec9917de..6ba97b8f 100644
--- a/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs
+++ b/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs
@@ -1,4 +1,5 @@
-using Dlhis.Canteen.Order.Dto;
+using Dlhis.Basic.Api;
+using Dlhis.Canteen.Order.Dto;
using Dlhis.Canteen.Order.Repository;
using Dlhis.Canteen.Setting.Services;
using Dlhis.Entity.Basic.Entity;
@@ -31,6 +32,7 @@ public class OrderService : IOrderService
private readonly IBalanceRepository _balanceRepository;
private readonly IOrderRepository _orderRepository;
private readonly RedisCache _redisCache;
+ private readonly IGainfoPermissionApi _gainfoPermissionApi;
private readonly ILogger _logger;
public OrderService(ICanteenSettingService canteenSettingService,
@@ -40,6 +42,7 @@ public class OrderService : IOrderService
IBalanceRepository balanceRepository,
IOrderRepository orderRepository,
RedisCache redisCache,
+ IGainfoPermissionApi gainfoPermissionApi,
ILogger logger)
{
_canteenSettingService = canteenSettingService;
@@ -49,6 +52,7 @@ public class OrderService : IOrderService
_balanceRepository = balanceRepository;
_orderRepository = orderRepository;
_redisCache = redisCache;
+ _gainfoPermissionApi = gainfoPermissionApi;
_logger = logger;
}
@@ -126,6 +130,19 @@ public class OrderService : IOrderService
//******************************************************* help methods ************************************************************/
+ private async Task CheckPermissionAsync(string userCode, string deviceUniqueNo)
+ {
+ var r = await _gainfoPermissionApi.GetPermissionsDeviceCodesAsync(userCode);
+ if (r.Code != Kurisu.RemoteCall.Default.ApiStateCode.Success)
+ {
+ true.ThrowIfTrue(r.Msg);
+ }
+
+ var code = await _dbContext.Queryable().Where(x => x.UniqueNo == deviceUniqueNo).Select(x => x.Code).SingleAsync();
+ r.Data.Contains(code).ThrowIfFalse("无权消费");
+ }
+
+
///
/// 获取当前消费人员
///
@@ -142,6 +159,7 @@ public class OrderService : IOrderService
if (request.UserUniqueNo.StartsWith("01"))
{
gainfo = await GetUserByQrCodeAsync(request.UserUniqueNo);
+ await CheckPermissionAsync(gainfo.Code, request.DeviceUniqueNo);
}
else if (request.UserUniqueNo.StartsWith("02"))
{
diff --git a/Src/Dlhis.Canteen/Properties/launchSettings.json b/Src/Dlhis.Canteen/Properties/launchSettings.json
index 706bb9bb..44a2ded1 100644
--- a/Src/Dlhis.Canteen/Properties/launchSettings.json
+++ b/Src/Dlhis.Canteen/Properties/launchSettings.json
@@ -7,6 +7,15 @@
},
"dotnetRunMessages": true,
"applicationUrl": "http://localhost:5008"
+ },
+ "Container (Dockerfile)": {
+ "commandName": "Docker",
+ "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}",
+ "environmentVariables": {
+ "ASPNETCORE_URLS": "http://+:80"
+ },
+ "publishAllPorts": true,
+ "useSSL": false
}
},
"$schema": "https://json.schemastore.org/launchsettings.json"
diff --git a/Src/Dlhis.ScheduledTask/Common/Services/Implements/SapBusinessTripService.cs b/Src/Dlhis.ScheduledTask/Common/Services/Implements/SapBusinessTripService.cs
deleted file mode 100644
index e3ec2c19..00000000
--- a/Src/Dlhis.ScheduledTask/Common/Services/Implements/SapBusinessTripService.cs
+++ /dev/null
@@ -1,144 +0,0 @@
-using Dlhis.Basic.Api;
-using Dlhis.Entity.Basic.Entity;
-using Dlhis.Entity.Device.Entities;
-using Dlhis.Entity.Device.Enums;
-using Dlhis.Entity.Sys.Entities;
-using Dlhis.Entity.Sys.Enums;
-using Dlhis.Entity.Visitor.Entity;
-using Dlhis.Entity.Visitor.Enums;
-using Kurisu.AspNetCore.DataAccess.SqlSugar.Services;
-using Kurisu.AspNetCore.Utils.Extensions;
-using Mapster;
-using SqlSugar;
-
-namespace Dlhis.ScheduledTask.Common.Services.Implements;
-
-public class SapBusinessTripService : ISapBusinessTripService
-{
- private readonly IJinkoJipService _jinkoJipService;
- private readonly IDbContext _dbContext;
- private readonly IDevicePermissionApi _devicePermissionApi;
- private readonly ILogger _logger;
-
- public SapBusinessTripService(IJinkoJipService jinkoJipService, IDbContext dbContext, IDevicePermissionApi devicePermissionApi, ILogger logger)
- {
- _jinkoJipService = jinkoJipService;
- _dbContext = dbContext;
- _devicePermissionApi = devicePermissionApi;
- _logger = logger;
- }
-
- ///
- public async Task HandlerBusinessTripsByFactoryAsync(string factory)
- {
- var today = DateTime.Today;
- var yesterday = today.AddDays(-1);
-
- try
- {
- var tripResponse = await _jinkoJipService.GetTravelInfosByFactoryAsync(today, today, factory);
- if (!tripResponse.Items.Any())
- {
- return;
- }
-
- foreach (var tripInfoItem in tripResponse.Items.Where(x => x.Destination.IsPresent()))
- {
- if (await _dbContext.Queryable().Where(x => x.Code == tripInfoItem.Code
- && x.BeginDate == tripInfoItem.BeginDate
- && x.EndDate == tripInfoItem.EndDate
- && x.Destination == factory).AnyAsync())
- {
- continue;
- }
-
- var entity = tripInfoItem.Adapt();
- entity.Status = BusinessTripStatusEnumType.Wait;
- await _dbContext.InsertAsync(entity);
- }
-
- //获取今天和昨天的出差数据
- var tripInfos = await _dbContext.Queryable()
- .Where(x => (SqlFunc.DateIsSame(x.BeginDate, today) && SqlFunc.DateIsSame(x.BeginDate, today))
- || (SqlFunc.DateIsSame(x.BeginDate, yesterday) && SqlFunc.DateIsSame(x.BeginDate, yesterday)))
- .Where(x => !SqlFunc.IsNullOrEmpty(x.Destination))
- .Where(x => x.Destination == factory)
- .ToListAsync();
-
- //获取分组信息
- var tripGroup = await _dbContext.Queryable()
- .Where(x => x.Type == DeviceTypeEnumType.Door)
- .Where(x => x.TenantId == factory)
- .Where(x => x.IsBusinessTrip)
- .SingleAsync();
-
- var userCodes = tripInfos.Select(x => x.Code).Distinct().ToList();
- var gainfos = await _dbContext.Queryable().Where(x => userCodes.Contains(x.Code)).ToListAsync();
-
- foreach (var gainfo in gainfos)
- {
- try
- {
- var myTripInfos = tripInfos.Where(x => x.Code == gainfo.Code).ToList();
-
- var yesterdayTripInfo = myTripInfos.FirstOrDefault(x => x.BeginDate == yesterday && x.EndDate == yesterday); //昨天出差数据
- var todayTripInfo = myTripInfos.FirstOrDefault(x => x.BeginDate == today && x.EndDate == today); //今天出差数据
-
- //都为空不处理
- if (yesterdayTripInfo == null && todayTripInfo == null) continue;
-
- //都不为空则更新数据状态
- if (yesterdayTripInfo != null && todayTripInfo != null)
- {
- todayTripInfo.Status = BusinessTripStatusEnumType.Generated;
- await _dbContext.UpdateAsync(todayTripInfo);
- continue;
- }
-
- var beforeResult = await _devicePermissionApi.GetPermissionUsersInfoAsync(new List { gainfo.Code });
-
- if (yesterdayTripInfo != null)
- {
- yesterdayTripInfo.Status = BusinessTripStatusEnumType.Deleted;
- await _dbContext.Updateable()
- .SetColumns(x => x.IsDeleted == true)
- .Where(x => x.AssignType == AssignTypeEnumType.User)
- .Where(x => x.AssignValue == gainfo.No)
- .Where(x => x.UniqueType == DeviceAssignmentTypeEnumType.Group)
- .Where(x => x.UniqueValue == tripGroup.Code)
- .Where(x => x.Type == tripGroup.Type)
- .Where(x => x.TenantId == factory)
- .ExecuteCommandAsync();
- await _dbContext.UpdateAsync(yesterdayTripInfo);
- }
-
- if (yesterdayTripInfo == null)
- {
- todayTripInfo.Status = BusinessTripStatusEnumType.Generated;
- await _dbContext.InsertAsync(new DevicePermissionEntity
- {
- AssignType = AssignTypeEnumType.User,
- AssignValue = gainfo.No,
- UniqueType = DeviceAssignmentTypeEnumType.Group,
- UniqueValue = tripGroup.Code,
- TenantId = factory,
- Type = tripGroup.Type,
- IsDeleted = false
- });
- await _dbContext.UpdateAsync(todayTripInfo);
- }
-
- await _devicePermissionApi.RePermissionUsersInfoAsync(beforeResult.Data);
- }
- catch (Exception e)
- {
- _logger.LogError(e, "出差自动下发任务失败:{message}", e.Message);
- }
- }
- }
- catch (Exception e)
- {
- _logger.LogError(e, "处理{factory}出差数据失败:{message}", factory, e.Message);
- }
- }
-}
\ No newline at end of file