diff --git a/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs b/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs
index 77b58379..9e532d2b 100644
--- a/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs
+++ b/Src/Dlhis.Basic/Device/Controllers/DevicePermissionsController.cs
@@ -1,6 +1,8 @@
using Dlhis.Basic.Device.Dtos;
using Dlhis.Basic.Device.Request;
using Dlhis.Basic.Device.Services;
+using Dlhis.Basic.Organization.Dto;
+using Kurisu.AspNetCore.DataAccess.Dto;
using Kurisu.AspNetCore.DataAccess.SqlSugar.Aop;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
@@ -91,4 +93,15 @@ public class DevicePermissionsController : ControllerBase
{
return await _devicePermissionService.ReGeneratePermissionUsersInfoAsync(beforeDto);
}
+
+ ///
+ /// 获取设备下人员分页
+ ///
+ ///
+ ///
+ [HttpGet("gainfos/page")]
+ public async Task> GetGainfoPageByDeviceAsync([FromQuery] DeviceWithGainfoRequest request)
+ {
+ return await _devicePermissionService.GetGainfoPageByDeviceAsync(request);
+ }
}
\ No newline at end of file
diff --git a/Src/Dlhis.Basic/Device/Request/DeviceWithGainfoRequest.cs b/Src/Dlhis.Basic/Device/Request/DeviceWithGainfoRequest.cs
new file mode 100644
index 00000000..2836c0de
--- /dev/null
+++ b/Src/Dlhis.Basic/Device/Request/DeviceWithGainfoRequest.cs
@@ -0,0 +1,13 @@
+using System.ComponentModel.DataAnnotations;
+using Kurisu.AspNetCore.DataAccess.Dto;
+
+namespace Dlhis.Basic.Device.Request;
+
+public class DeviceWithGainfoRequest : PageDto
+{
+ ///
+ /// 设备号
+ ///
+ [Required(ErrorMessage = "设备号不能为空")]
+ public string DeviceUniqueNo { get; set; }
+}
\ No newline at end of file
diff --git a/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs b/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs
index 39fe6948..60078ef1 100644
--- a/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs
+++ b/Src/Dlhis.Basic/Device/Services/IDevicePermissionService.cs
@@ -1,7 +1,9 @@
using Dlhis.Basic.Device.Dtos;
using Dlhis.Basic.Device.Request;
+using Dlhis.Basic.Organization.Dto;
using Dlhis.Entity.Device.Enums;
using Dlhis.Entity.Sys.Enums;
+using Kurisu.AspNetCore.DataAccess.Dto;
namespace Dlhis.Basic.Device.Services;
@@ -43,7 +45,7 @@ public interface IDevicePermissionService : IScopeDependency
///
///
Task GenerateDeviceTasksAsync(string userNo, DeviceTaskEnumType taskType);
-
+
///
/// 获取用户所有设备权限
///
@@ -64,4 +66,7 @@ public interface IDevicePermissionService : IScopeDependency
Task ReGeneratePermissionUsersInfoAsync(PermissionUsersInfoDto beforeDto);
-}
+
+
+ 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 6df936d0..ea780b3b 100644
--- a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs
+++ b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs
@@ -5,12 +5,16 @@ using Dlhis.Entity.Device.Entities;
using Dlhis.Entity.Device.Enums;
using Dlhis.Entity.Sys.Entities;
using Dlhis.Entity.Sys.Enums;
+using Dlhis.Scheduled.Api;
using Kurisu.AspNetCore.Authentication.Abstractions;
+using Kurisu.AspNetCore.DataAccess.Dto;
using Kurisu.AspNetCore.DataAccess.Entity;
+using Kurisu.AspNetCore.DataAccess.SqlSugar.Extensions;
using Kurisu.AspNetCore.DataAccess.SqlSugar.Services;
using Kurisu.AspNetCore.Utils;
using Kurisu.AspNetCore.Utils.Extensions;
using SqlSugar;
+using GeneratePermissionIdRequest = Dlhis.Scheduled.Api.Request.GeneratePermissionIdRequest;
namespace Dlhis.Basic.Device.Services.Implements;
@@ -19,12 +23,14 @@ public class DevicePermissionService : IDevicePermissionService
private readonly IDbContext _dbContext;
private readonly ICurrentUser _currentUser;
private readonly RedisCache _redisCache;
+ private readonly IHangfireApi _hangfireApi;
public DevicePermissionService(IDbContext dbContext, ICurrentUser currentUser, RedisCache redisCache)
{
_dbContext = dbContext;
_currentUser = currentUser;
_redisCache = redisCache;
+ _hangfireApi = hangfireApi;
}
public async Task AssignAsync(DevicePermissionSaveRequest request)
@@ -303,6 +309,60 @@ public class DevicePermissionService : IDevicePermissionService
return waitTasks.Count;
}
+
+ public async Task> GetGainfoPageByDeviceAsync(DeviceWithGainfoRequest request)
+ {
+ var device = await _dbContext.Queryable().Where(x => x.UniqueNo == request.DeviceUniqueNo).SingleAsync();
+
+ //当前设备的分组
+ var groups = await _dbContext.Queryable()
+ .Where(x => x.DeviceCode == device.Code)
+ .Select(x => x.GroupCode)
+ .ToListAsync();
+
+ var permissions = await _dbContext.Queryable()
+ .Where(x => (x.UniqueType == DeviceAssignmentTypeEnumType.Device && x.UniqueValue == device.Code) || (x.UniqueType == DeviceAssignmentTypeEnumType.Group && groups.Contains(x.UniqueValue)))
+ .ToListAsync();
+
+ var ids = new List();
+ foreach (var permission in permissions)
+ {
+ switch (permission.AssignType)
+ {
+ case AssignTypeEnumType.User:
+ ids.Add(await _dbContext.Queryable().Where(x => x.No == permission.AssignValue).Select(x => x.Id).SingleAsync());
+ break;
+ case AssignTypeEnumType.Group:
+ {
+ var code = Guid.Parse(permission.AssignValue);
+ ids.AddRange(await _dbContext.Queryable().Where(x => x.Code == code)
+ .LeftJoin((a, b) => a.Code == b.GroupCode)
+ .LeftJoin((a, b, c) => b.UserNo == c.No)
+ .Select((a, b, c) => c.Id).ToListAsync());
+ }
+ break;
+ case AssignTypeEnumType.Department:
+ {
+ ids.AddRange(await _dbContext.Queryable().Where(x => x.DepartmentNo == permission.AssignValue).Select(x => x.Id).ToListAsync());
+ }
+ break;
+ case AssignTypeEnumType.Tenant:
+ {
+ ids.AddRange(await _dbContext.Queryable().Where(x => x.Factory == permission.AssignValue).Select(x => x.Id).ToListAsync());
+ }
+ break;
+ default:
+ throw new ArgumentOutOfRangeException();
+ }
+ }
+
+ return await _dbContext.Queryable()
+ .Where(x => ids.Contains(x.Id))
+ .WhereIF(request.Search.IsPresent(), x => x.Code == request.Search || x.Name.Contains(request.Search))
+ .Select()
+ .ToPageListAsync(request);
+ }
+
public async Task GenerateDeviceTasksAsync(string userNo, DeviceTaskEnumType taskType)
{
var deviceCodes = await GetAssignDeviceCodesAsync(userNo);
@@ -311,12 +371,12 @@ public class DevicePermissionService : IDevicePermissionService
return;
}
- var devices = await _dbContext.Queryable()
+ var deivces = await _dbContext.Queryable()
.Where(x => x.Enable)
.Where(x => deviceCodes.Contains(x.Code))
.ToListAsync();
- var tasks = devices.Select(x => new DeviceTaskEntity
+ var tasks = deivces.Select(x => new DeviceTaskEntity
{
DeviceUniqueNo = x.UniqueNo,
Status = DeviceTaskStatusEnumType.Wait,
@@ -324,7 +384,6 @@ public class DevicePermissionService : IDevicePermissionService
DeviceType = x.Type,
UserNo = userNo,
CancellationId = 0,
- Priority = 0,
Version = 0,
TenantId = x.TenantId
}).ToList();
@@ -406,7 +465,7 @@ public class DevicePermissionService : IDevicePermissionService
.Where(x => x.AssignType == assignType)
.Where(x => x.AssignValue == assignValue)
.GroupBy(x => x.TenantId)
- .Select(x => new UserTenantDeviceCodeDto { Tenant = x.Key, Codes = x.Select(p => p.UniqueValue).ToList() })
+ .Select(x => new UserTenantDeviceCodeDto { Tenant = x.Key, Codes = x.Select(x => x.UniqueValue).ToList() })
.ToList();
//处理获取设备分组的情况
@@ -428,9 +487,9 @@ public class DevicePermissionService : IDevicePermissionService
};
}).ToList();
- void RecursionGetNext(DeviceGroupEntity current, List internalDeviceGroups, List result, bool add)
+ void RecursionGetNext(DeviceGroupEntity current, List deviceGroups, List result, bool add)
{
- var next = internalDeviceGroups.Where(x => x.PCode == current.Code).ToList();
+ var next = deviceGroups.Where(x => x.PCode == current.Code).ToList();
foreach (var item in next)
{
if (add)
@@ -438,7 +497,7 @@ public class DevicePermissionService : IDevicePermissionService
result.Add(new UserTenantDeviceCodeDto { Tenant = item.TenantId, Codes = new List { item.Code } });
}
- RecursionGetNext(item, internalDeviceGroups, result, result.SelectMany(x => x.Codes).Contains(item.Code));
+ RecursionGetNext(item, deviceGroups, result, result.SelectMany(x => x.Codes).Contains(item.Code));
}
}
}
diff --git a/Src/Dlhis.Basic/Organization/Dto/GainfoDto.cs b/Src/Dlhis.Basic/Organization/Dto/GainfoDto.cs
new file mode 100644
index 00000000..11a57286
--- /dev/null
+++ b/Src/Dlhis.Basic/Organization/Dto/GainfoDto.cs
@@ -0,0 +1,10 @@
+namespace Dlhis.Basic.Organization.Dto;
+
+public class GainfoDto
+{
+ public long Id { get; set; }
+ public string Code { get; set; }
+ public string Name { get; set; }
+ public string Workplace { get; set; }
+ public string Factory { get; set; }
+}
\ No newline at end of file
diff --git a/Src/Dlhis.Basic/Organization/Response/GainfoCurrentResponse.cs b/Src/Dlhis.Basic/Organization/Response/GainfoCurrentResponse.cs
index c92e7cf5..2404010f 100644
--- a/Src/Dlhis.Basic/Organization/Response/GainfoCurrentResponse.cs
+++ b/Src/Dlhis.Basic/Organization/Response/GainfoCurrentResponse.cs
@@ -45,7 +45,7 @@ public class GainfoCurrentResponse
///
/// 出生日期/生日
///
- //[JsonConverter(typeof(ToDateJsonConverter))]
+ [JsonConverter(typeof(ToDateJsonConverter))]
public DateTime Birthday { get; set; }
///
diff --git a/Src/Dlhis.Basic/Organization/Response/GainfoDetailResponse.cs b/Src/Dlhis.Basic/Organization/Response/GainfoDetailResponse.cs
index 937c8da2..9c3db6c1 100644
--- a/Src/Dlhis.Basic/Organization/Response/GainfoDetailResponse.cs
+++ b/Src/Dlhis.Basic/Organization/Response/GainfoDetailResponse.cs
@@ -70,7 +70,7 @@ public class GainfoDetailResponse
///
/// 出生日期
///
- //[JsonConverter(typeof(ToDateJsonConverter))]
+ [JsonConverter(typeof(ToDateJsonConverter))]
public DateTime Birthday { get; set; }
///
diff --git a/Src/Dlhis.Basic/Organization/Response/GainfoPageResponse.cs b/Src/Dlhis.Basic/Organization/Response/GainfoPageResponse.cs
index 1a1b0cd2..3de856ad 100644
--- a/Src/Dlhis.Basic/Organization/Response/GainfoPageResponse.cs
+++ b/Src/Dlhis.Basic/Organization/Response/GainfoPageResponse.cs
@@ -65,7 +65,7 @@ public class GainfoPageResponse
///
/// 生日
///
- //[JsonConverter(typeof(ToDateJsonConverter))]
+ [JsonConverter(typeof(ToDateJsonConverter))]
public DateTime Birthday { get; set; }
///
diff --git a/Src/Dlhis.Basic/Places/Controllers/BusinessPlacesController.cs b/Src/Dlhis.Basic/Places/Controllers/BusinessPlacesController.cs
index 49600a9a..edf388e1 100644
--- a/Src/Dlhis.Basic/Places/Controllers/BusinessPlacesController.cs
+++ b/Src/Dlhis.Basic/Places/Controllers/BusinessPlacesController.cs
@@ -127,4 +127,4 @@ public class BusinessPlacesController : ControllerBase
{
await _businessPlaceShiftService.DispositionDeviceAsync(request);
}
-}
+}
\ No newline at end of file
diff --git a/Src/Dlhis.Basic/Places/Services/Implements/BusinessPlaceService.cs b/Src/Dlhis.Basic/Places/Services/Implements/BusinessPlaceService.cs
index f715b1f5..895fe2ef 100644
--- a/Src/Dlhis.Basic/Places/Services/Implements/BusinessPlaceService.cs
+++ b/Src/Dlhis.Basic/Places/Services/Implements/BusinessPlaceService.cs
@@ -1,8 +1,11 @@
using Dlhis.Basic.Places.Request;
using Dlhis.Basic.Places.Response;
using Dlhis.Entity.Basic.Entity;
+using Dlhis.Entity.Canteen.Entities;
using Dlhis.Entity.Canteen.Enums;
+using Kurisu.AspNetCore.CustomClass;
using Kurisu.AspNetCore.DataAccess.Dto;
+using Kurisu.AspNetCore.DataAccess.Entity;
using Kurisu.AspNetCore.DataAccess.SqlSugar.Extensions;
using Kurisu.AspNetCore.DataAccess.SqlSugar.Services;
using Kurisu.AspNetCore.Utils.Extensions;
@@ -112,6 +115,11 @@ public class BusinessPlaceService : IBusinessPlaceService
else
{
var entity = await _dbContext.Queryable().FirstAsync(x => x.Id == request.Id);
+ if (await _dbContext.Queryable().AnyAsync(x => x.BusinessPlaceCode == entity.Code) && request.CustomCode != entity.CustomCode)
+ {
+ throw new UserFriendlyException("设备已产生消费记录,不可编辑编码");
+ }
+
request.Adapt(entity);
await _dbContext.UpdateAsync(entity);
@@ -149,12 +157,15 @@ public class BusinessPlaceService : IBusinessPlaceService
///
private async Task CheckExistsCustomCodeAsync(BusinessPlaceSaveRequest request)
{
- var existsSameCustomCode = await _dbContext.Queryable()
- .Where(x => x.CustomCode == request.CustomCode)
- .WhereIF(request.Id.HasValue, x => x.Id != request.Id)
- .AnyAsync();
+ await _dbContext.IgnoreAsync(async () =>
+ {
+ var existsSameCustomCode = await _dbContext.Queryable()
+ .Where(x => x.CustomCode == request.CustomCode)
+ .WhereIF(request.Id.HasValue, x => x.Id != request.Id)
+ .AnyAsync();
- existsSameCustomCode.ThrowIfTrue($"自定义手工号[{request.CustomCode}]存在重复,请检查.");
+ existsSameCustomCode.ThrowIfTrue($"自定义手工号[{request.CustomCode}]存在重复,请检查.");
+ });
}
///
diff --git a/Src/Dlhis.Canteen/MealSupplementRecord/Response/MealSupplementRecordMyResponse.cs b/Src/Dlhis.Canteen/MealSupplementRecord/Response/MealSupplementRecordMyResponse.cs
index 88339d43..b43de229 100644
--- a/Src/Dlhis.Canteen/MealSupplementRecord/Response/MealSupplementRecordMyResponse.cs
+++ b/Src/Dlhis.Canteen/MealSupplementRecord/Response/MealSupplementRecordMyResponse.cs
@@ -8,7 +8,7 @@ public class MealSupplementRecordItemResponse
///
/// 餐补日期
///
- //[JsonConverter(typeof(ToDateJsonConverter))]
+ [JsonConverter(typeof(ToDateJsonConverter))]
public DateTime Date { get; set; }
[JsonIgnore]
diff --git a/Src/Dlhis.Canteen/MealSupplementRecord/Response/MealSupplementRecordResponse.cs b/Src/Dlhis.Canteen/MealSupplementRecord/Response/MealSupplementRecordResponse.cs
index 55597a58..f0c4ef9d 100644
--- a/Src/Dlhis.Canteen/MealSupplementRecord/Response/MealSupplementRecordResponse.cs
+++ b/Src/Dlhis.Canteen/MealSupplementRecord/Response/MealSupplementRecordResponse.cs
@@ -32,7 +32,7 @@ public class MealSupplementRecordResponse
///
/// 考勤日期
///
- //[JsonConverter(typeof(ToDateJsonConverter))]
+ [JsonConverter(typeof(ToDateJsonConverter))]
public DateTime Date { get; set; }
///
diff --git a/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs b/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs
index 83dcacab..8bc42ee2 100644
--- a/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs
+++ b/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs
@@ -30,7 +30,6 @@ public class BalancesController : ControllerBase
///
///
[Authorize(Roles = "admin,tenant-admin")]
- [DataPermission]
[HttpGet]
public async Task> GetPageAsync([FromQuery] BalanceRecordPageRequest request)
{
@@ -139,7 +138,6 @@ public class BalancesController : ControllerBase
return await _balanceService.GetConsumeDeviceAsync(request);
}
-
///
/// 海宁餐补数据写入
///
diff --git a/Src/Dlhis.Canteen/Order/Response/BalanceRecordDeviceResponse.cs b/Src/Dlhis.Canteen/Order/Response/BalanceRecordDeviceResponse.cs
index d1d9a607..9f8d423b 100644
--- a/Src/Dlhis.Canteen/Order/Response/BalanceRecordDeviceResponse.cs
+++ b/Src/Dlhis.Canteen/Order/Response/BalanceRecordDeviceResponse.cs
@@ -42,7 +42,7 @@ public class BalanceRecordDeviceResponse
///
/// 所属成本日期
///
- //[JsonConverter(typeof(ToDateJsonConverter))]
+ [JsonConverter(typeof(ToDateJsonConverter))]
public DateTime CostDate { get; set; }
///
diff --git a/Src/Dlhis.Canteen/Order/Response/BalanceRecordResponse.cs b/Src/Dlhis.Canteen/Order/Response/BalanceRecordResponse.cs
index c9447082..ac4c6183 100644
--- a/Src/Dlhis.Canteen/Order/Response/BalanceRecordResponse.cs
+++ b/Src/Dlhis.Canteen/Order/Response/BalanceRecordResponse.cs
@@ -48,7 +48,7 @@ public class BalanceRecordResponse
///
/// 所属成本日期
///
- //[JsonConverter(typeof(ToDateJsonConverter))]
+ [JsonConverter(typeof(ToDateJsonConverter))]
public DateTime CostDate { get; set; }
///
diff --git a/Src/Dlhis.Canteen/Order/Response/OrderBookingResponse.cs b/Src/Dlhis.Canteen/Order/Response/OrderBookingResponse.cs
index f188d17f..7c096540 100644
--- a/Src/Dlhis.Canteen/Order/Response/OrderBookingResponse.cs
+++ b/Src/Dlhis.Canteen/Order/Response/OrderBookingResponse.cs
@@ -66,7 +66,7 @@ public class OrderBookingResponse
///
/// 订餐日期
///
- //[JsonConverter(typeof(ToDateJsonConverter))]
+ [JsonConverter(typeof(ToDateJsonConverter))]
public DateTime BookingDate { get; set; }
///
diff --git a/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs b/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs
index 96046a19..4a32d04f 100644
--- a/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs
+++ b/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs
@@ -97,6 +97,7 @@ public class BalanceService : IBalanceService
}
catch (Exception)
{
+ //ignore
}
return page;
diff --git a/Src/Dlhis.Entity/Basic/Entity/BusinessPlaceGroupEntity.cs b/Src/Dlhis.Entity/Basic/Entity/BusinessPlaceGroupEntity.cs
index c92f0495..884b8422 100644
--- a/Src/Dlhis.Entity/Basic/Entity/BusinessPlaceGroupEntity.cs
+++ b/Src/Dlhis.Entity/Basic/Entity/BusinessPlaceGroupEntity.cs
@@ -17,9 +17,8 @@ public class BusinessPlaceGroupEntity : SugarBaseEntity, ITenantId
[SugarColumn(ColumnDescription = "名称")]
public string Name { get; set; }
-
[SugarColumn(ColumnDescription = "备注")]
public string Remark { get; set; }
public string TenantId { get; set; }
-}
+}
\ No newline at end of file
diff --git a/Src/Dlhis.Entity/Dlhis.Entity.csproj b/Src/Dlhis.Entity/Dlhis.Entity.csproj
index 50a359c2..56780d28 100644
--- a/Src/Dlhis.Entity/Dlhis.Entity.csproj
+++ b/Src/Dlhis.Entity/Dlhis.Entity.csproj
@@ -7,7 +7,7 @@
-
+
diff --git a/Src/Dlhis.ScheduledTask/TaskAssignment/Controllers/DeviceTaskAssignmentsController.cs b/Src/Dlhis.ScheduledTask/TaskAssignment/Controllers/DeviceTaskAssignmentsController.cs
index 1a016bf5..cab1b625 100644
--- a/Src/Dlhis.ScheduledTask/TaskAssignment/Controllers/DeviceTaskAssignmentsController.cs
+++ b/Src/Dlhis.ScheduledTask/TaskAssignment/Controllers/DeviceTaskAssignmentsController.cs
@@ -29,7 +29,6 @@ public class DeviceTaskAssignmentsController : ControllerBase
///
///
[HttpGet("page")]
- [DataPermission]
public async Task> GetPageAsync([FromQuery] DeviceTaskAssignmentRequest request)
{
return await _deviceTaskAssignmentService.GetPageAsync(request);
@@ -44,4 +43,4 @@ public class DeviceTaskAssignmentsController : ControllerBase
{
await _deviceTaskAssignmentService.ResetAsync(request);
}
-}
+}
\ No newline at end of file