feat 电子围栏数据配置
This commit is contained in:
95
Src/Dlhis.Basic/WorkGrids/Controllers/EFenceController.cs
Normal file
95
Src/Dlhis.Basic/WorkGrids/Controllers/EFenceController.cs
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
using Dlhis.Basic.WorkGrids.Request;
|
||||||
|
using Dlhis.Basic.WorkGrids.Response;
|
||||||
|
using Dlhis.Basic.WorkGrids.Services;
|
||||||
|
using Kurisu.AspNetCore.DataAccess.Dto;
|
||||||
|
using Microsoft.AspNetCore.Authorization;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
|
namespace Dlhis.Basic.WorkGrids.Controllers;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 电子围栏操作
|
||||||
|
/// </summary>
|
||||||
|
[Authorize]
|
||||||
|
[Route("api/[controller]")]
|
||||||
|
[ApiController]
|
||||||
|
public class EFenceController : ControllerBase
|
||||||
|
{
|
||||||
|
private readonly IEFenceService _eFenceService;
|
||||||
|
|
||||||
|
public EFenceController(IEFenceService eFenceService)
|
||||||
|
{
|
||||||
|
_eFenceService = eFenceService;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 保存电子围栏(新增或更新)
|
||||||
|
/// </summary>
|
||||||
|
[HttpPost("save")]
|
||||||
|
public async Task SaveAsync([FromBody] EFenceSaveRequest request)
|
||||||
|
{
|
||||||
|
await _eFenceService.SaveAsync(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取电子围栏分页
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="request"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpGet("page")]
|
||||||
|
public async Task<Pagination<EFencePageResponse>> GetEFencePageAsync([FromQuery] EFencePageRequest request)
|
||||||
|
{
|
||||||
|
return await _eFenceService.GetEFencePageAsync(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取围栏下的房间
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="eFenceCode"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpGet("rooms")]
|
||||||
|
public async Task<List<EFenceDormitoryRoomResponse>> GetRoomsAsync(Guid eFenceCode)
|
||||||
|
{
|
||||||
|
return await _eFenceService.GetRoomsAsync(eFenceCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取房间人员
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="roomId"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpGet("room-persons")]
|
||||||
|
public async Task<List<EFenceDormitoryRoomPersonResponse>> GetRoomPersonsAsync(string roomId)
|
||||||
|
{
|
||||||
|
return await _eFenceService.GetRoomPersonsAsync(roomId);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 向围栏添加设备
|
||||||
|
/// </summary>
|
||||||
|
[HttpPost("devices/add")]
|
||||||
|
public async Task AddDevicesAsync(EFenceDevicesRequest request)
|
||||||
|
{
|
||||||
|
await _eFenceService.AddDevicesAsync(request.FenceId, request.DeviceCodes);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 从围栏移除设备
|
||||||
|
/// </summary>
|
||||||
|
[HttpPost("devices/remove")]
|
||||||
|
public async Task RemoveDevicesAsync(EFenceDevicesRequest request)
|
||||||
|
{
|
||||||
|
await _eFenceService.RemoveDevicesAsync(request.FenceId, request.DeviceCodes);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取设备列表
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="fenceId"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpGet("devices")]
|
||||||
|
public async Task<List<EFenceDevicePageResponse>> GetDevicesByFenceIdAsync(long fenceId)
|
||||||
|
{
|
||||||
|
return await _eFenceService.GetDevicesByFenceIdAsync(fenceId);
|
||||||
|
}
|
||||||
|
}
|
||||||
12
Src/Dlhis.Basic/WorkGrids/Request/EFenceDevicesRequest.cs
Normal file
12
Src/Dlhis.Basic/WorkGrids/Request/EFenceDevicesRequest.cs
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
|
||||||
|
namespace Dlhis.Basic.WorkGrids.Request;
|
||||||
|
|
||||||
|
public class EFenceDevicesRequest
|
||||||
|
{
|
||||||
|
[Range(1, long.MaxValue)]
|
||||||
|
public long FenceId { get; set; }
|
||||||
|
|
||||||
|
[MinLength(1)]
|
||||||
|
public List<Guid> DeviceCodes { get; set; }
|
||||||
|
}
|
||||||
8
Src/Dlhis.Basic/WorkGrids/Request/EFencePageRequest.cs
Normal file
8
Src/Dlhis.Basic/WorkGrids/Request/EFencePageRequest.cs
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
using Kurisu.AspNetCore.DataAccess.Dto;
|
||||||
|
|
||||||
|
namespace Dlhis.Basic.WorkGrids.Request;
|
||||||
|
|
||||||
|
public class EFencePageRequest : PageDto
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
13
Src/Dlhis.Basic/WorkGrids/Request/EFenceSaveRequest.cs
Normal file
13
Src/Dlhis.Basic/WorkGrids/Request/EFenceSaveRequest.cs
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
|
||||||
|
namespace Dlhis.Basic.WorkGrids.Request;
|
||||||
|
|
||||||
|
public class EFenceSaveRequest
|
||||||
|
{
|
||||||
|
public long? Id { get; set; }
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
public string Name { get; set; }
|
||||||
|
|
||||||
|
public string Description { get; set; }
|
||||||
|
}
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
using Dlhis.Entity.Device.Enums;
|
||||||
|
|
||||||
|
namespace Dlhis.Basic.WorkGrids.Response;
|
||||||
|
|
||||||
|
public class EFenceDevicePageResponse
|
||||||
|
{
|
||||||
|
public long Id { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 设备code
|
||||||
|
/// </summary>
|
||||||
|
public Guid Code { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 设备唯一码,IP/MAC/SNO
|
||||||
|
/// </summary>
|
||||||
|
public string UniqueNo { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 部署点
|
||||||
|
/// </summary>
|
||||||
|
public string DeployPlace { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 部署坐标
|
||||||
|
/// </summary>
|
||||||
|
public string DeployPosition { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 部署方向
|
||||||
|
/// </summary>
|
||||||
|
public DeviceDeployDirectionEnumType? DeployDirection { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 是否启用
|
||||||
|
/// </summary>
|
||||||
|
public bool Enable { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 厂区
|
||||||
|
/// </summary>
|
||||||
|
public string Factory { get; set; }
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
namespace Dlhis.Basic.WorkGrids.Response;
|
||||||
|
|
||||||
|
public class EFenceDormitoryRoomPersonResponse
|
||||||
|
{
|
||||||
|
public string RoomId { get; set; }
|
||||||
|
public string UserCode { get; set; }
|
||||||
|
public string UserName { get; set; }
|
||||||
|
public bool? In { get; set; }
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
namespace Dlhis.Basic.WorkGrids.Response;
|
||||||
|
|
||||||
|
public class EFenceDormitoryRoomResponse
|
||||||
|
{
|
||||||
|
public Guid EFenceCode { get; set; }
|
||||||
|
public string RoomId { get; set; }
|
||||||
|
public string RoomNo { get; set; }
|
||||||
|
public string HotelId { get; set; }
|
||||||
|
public bool PowerSwitch { get; set; }
|
||||||
|
}
|
||||||
23
Src/Dlhis.Basic/WorkGrids/Response/EFencePageResponse.cs
Normal file
23
Src/Dlhis.Basic/WorkGrids/Response/EFencePageResponse.cs
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
namespace Dlhis.Basic.WorkGrids.Response;
|
||||||
|
|
||||||
|
public class EFencePageResponse
|
||||||
|
{
|
||||||
|
public long Id { get; set; }
|
||||||
|
|
||||||
|
public Guid Code { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 围栏名称
|
||||||
|
/// </summary>
|
||||||
|
public string Name { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 描述/备注
|
||||||
|
/// </summary>
|
||||||
|
public string Description { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 设备数量
|
||||||
|
/// </summary>
|
||||||
|
public int DeviceCount { get; set; }
|
||||||
|
}
|
||||||
22
Src/Dlhis.Basic/WorkGrids/Services/IEFenceService.cs
Normal file
22
Src/Dlhis.Basic/WorkGrids/Services/IEFenceService.cs
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
using Dlhis.Basic.WorkGrids.Request;
|
||||||
|
using Dlhis.Basic.WorkGrids.Response;
|
||||||
|
using Kurisu.AspNetCore.DataAccess.Dto;
|
||||||
|
|
||||||
|
namespace Dlhis.Basic.WorkGrids.Services;
|
||||||
|
|
||||||
|
public interface IEFenceService : IScopeDependency
|
||||||
|
{
|
||||||
|
Task SaveAsync(EFenceSaveRequest request);
|
||||||
|
|
||||||
|
Task<Pagination<EFencePageResponse>> GetEFencePageAsync(EFencePageRequest request);
|
||||||
|
|
||||||
|
Task<List<EFenceDormitoryRoomResponse>> GetRoomsAsync(Guid eFenceCode);
|
||||||
|
|
||||||
|
Task<List<EFenceDormitoryRoomPersonResponse>> GetRoomPersonsAsync(string roomId);
|
||||||
|
|
||||||
|
Task AddDevicesAsync(long fenceId, List<Guid> deviceCodes);
|
||||||
|
|
||||||
|
Task RemoveDevicesAsync(long fenceId, List<Guid> deviceCodes);
|
||||||
|
|
||||||
|
Task<List<EFenceDevicePageResponse>> GetDevicesByFenceIdAsync(long fenceId);
|
||||||
|
}
|
||||||
143
Src/Dlhis.Basic/WorkGrids/Services/Implements/EFenceService.cs
Normal file
143
Src/Dlhis.Basic/WorkGrids/Services/Implements/EFenceService.cs
Normal file
@@ -0,0 +1,143 @@
|
|||||||
|
using Dlhis.Basic.WorkGrids.Request;
|
||||||
|
using Dlhis.Basic.WorkGrids.Response;
|
||||||
|
using Dlhis.Entity.Basic.Entity;
|
||||||
|
using Dlhis.Entity.Device.Entities;
|
||||||
|
using Dlhis.Entity.Dormitory.Entity;
|
||||||
|
using Kurisu.AspNetCore.DataAccess.Dto;
|
||||||
|
using Kurisu.AspNetCore.DataAccess.SqlSugar.Extensions;
|
||||||
|
using Kurisu.AspNetCore.DataAccess.SqlSugar.Services;
|
||||||
|
using Kurisu.AspNetCore.Utils.Extensions;
|
||||||
|
using Mapster;
|
||||||
|
using SqlSugar;
|
||||||
|
|
||||||
|
namespace Dlhis.Basic.WorkGrids.Services.Implements;
|
||||||
|
|
||||||
|
public class EFenceService : IEFenceService
|
||||||
|
{
|
||||||
|
private readonly IDbContext _dbContext;
|
||||||
|
|
||||||
|
public EFenceService(IDbContext dbContext)
|
||||||
|
{
|
||||||
|
_dbContext = dbContext;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public async Task SaveAsync(EFenceSaveRequest request)
|
||||||
|
{
|
||||||
|
if (!request.Id.HasValue)
|
||||||
|
{
|
||||||
|
var entity = request.Adapt<EFenceEntity>();
|
||||||
|
entity.Code = Guid.NewGuid();
|
||||||
|
await _dbContext.InsertAsync(entity);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var entity = await _dbContext.Queryable<EFenceEntity>().SingleAsync(x => x.Id == request.Id.Value);
|
||||||
|
request.Adapt(entity);
|
||||||
|
await _dbContext.UpdateAsync(entity);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<Pagination<EFencePageResponse>> GetEFencePageAsync(EFencePageRequest request)
|
||||||
|
{
|
||||||
|
var page = await _dbContext.Queryable<EFenceEntity>()
|
||||||
|
.WhereIF(request.Search.IsPresent(), x => x.Name.Contains(request.Search))
|
||||||
|
.OrderBy(x => x.Id, OrderByType.Desc)
|
||||||
|
.Select(x => new EFencePageResponse
|
||||||
|
{
|
||||||
|
Id = x.Id,
|
||||||
|
Code = x.Code,
|
||||||
|
Name = x.Name,
|
||||||
|
Description = x.Description,
|
||||||
|
DeviceCount = SqlFunc.Subqueryable<EFenceDeviceRelationEntity>().Where(p => p.EFenceCode == x.Code).Count(),
|
||||||
|
})
|
||||||
|
.ToPageListAsync(request);
|
||||||
|
|
||||||
|
return page;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<List<EFenceDormitoryRoomResponse>> GetRoomsAsync(Guid eFenceCode)
|
||||||
|
{
|
||||||
|
return await _dbContext.Queryable<DormitoryRoomEntity>()
|
||||||
|
.Where(x => x.EFenceCode == eFenceCode)
|
||||||
|
.Select<EFenceDormitoryRoomResponse>()
|
||||||
|
.ToListAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<List<EFenceDormitoryRoomPersonResponse>> GetRoomPersonsAsync(string roomId)
|
||||||
|
{
|
||||||
|
return await _dbContext.Queryable<DormitoryRoomPersonEntity>()
|
||||||
|
.Where(x => x.RoomId == roomId)
|
||||||
|
.Select<EFenceDormitoryRoomPersonResponse>()
|
||||||
|
.ToListAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task AddDevicesAsync(long fenceId, List<Guid> deviceCodes)
|
||||||
|
{
|
||||||
|
//查询电子围栏
|
||||||
|
var fence = await _dbContext.Queryable<EFenceEntity>().SingleAsync(f => f.Id == fenceId);
|
||||||
|
fence.ThrowIfNull("未找到电子围栏");
|
||||||
|
|
||||||
|
//查询设备
|
||||||
|
var devices = await _dbContext.Queryable<DeviceEntity>()
|
||||||
|
.Where(d => deviceCodes.Contains(d.Code))
|
||||||
|
.Where(d => d.DeployDirection.HasValue)
|
||||||
|
.Where(d => SqlFunc.Subqueryable<EFenceDeviceRelationEntity>()
|
||||||
|
.Where(p => p.EFenceCode == fence.Code && p.DeviceCode == d.Code)
|
||||||
|
.NotAny() //不可重复分配
|
||||||
|
)
|
||||||
|
.ToListAsync();
|
||||||
|
|
||||||
|
if (devices.Any())
|
||||||
|
{
|
||||||
|
var eFenceDeviceRelationEntities = devices.Select(x => new EFenceDeviceRelationEntity
|
||||||
|
{
|
||||||
|
DeviceCode = x.Code,
|
||||||
|
EFenceCode = fence.Code
|
||||||
|
}).ToList();
|
||||||
|
|
||||||
|
await _dbContext.InsertAsync(eFenceDeviceRelationEntities);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task RemoveDevicesAsync(long fenceId, List<Guid> deviceCodes)
|
||||||
|
{
|
||||||
|
//查询电子围栏
|
||||||
|
var fence = await _dbContext.Queryable<EFenceEntity>().SingleAsync(f => f.Id == fenceId);
|
||||||
|
fence.ThrowIfNull("未找到电子围栏");
|
||||||
|
|
||||||
|
//查询EFenceDeviceRelationEntity的设备
|
||||||
|
var relations = await _dbContext.Queryable<EFenceDeviceRelationEntity>()
|
||||||
|
.Where(r => r.EFenceCode == fence.Code && deviceCodes.Contains(r.DeviceCode))
|
||||||
|
.ToListAsync();
|
||||||
|
|
||||||
|
if (relations.Any())
|
||||||
|
{
|
||||||
|
await _dbContext.DeleteAsync(relations);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<List<EFenceDevicePageResponse>> GetDevicesByFenceIdAsync(long fenceId)
|
||||||
|
{
|
||||||
|
//查询电子围栏
|
||||||
|
var fence = await _dbContext.Queryable<EFenceEntity>().SingleAsync(f => f.Id == fenceId);
|
||||||
|
fence.ThrowIfNull("未找到电子围栏");
|
||||||
|
|
||||||
|
var deviceCodes = await _dbContext.Queryable<EFenceDeviceRelationEntity>()
|
||||||
|
.Where(x => x.EFenceCode == fence.Code)
|
||||||
|
.Select(x => x.DeviceCode)
|
||||||
|
.ToListAsync();
|
||||||
|
|
||||||
|
|
||||||
|
var list = await _dbContext.Queryable<DeviceEntity>()
|
||||||
|
.LeftJoin<DeviceTemplateEntity>((d, dt) => d.TemplateCode == dt.Code)
|
||||||
|
.Where((d, dt) => deviceCodes.Contains(d.Code))
|
||||||
|
.Select((d, dt) => new EFenceDevicePageResponse
|
||||||
|
{
|
||||||
|
Factory = d.TenantId
|
||||||
|
}, true)
|
||||||
|
.ToListAsync();
|
||||||
|
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
using Kurisu.AspNetCore.DataAccess.Entity;
|
||||||
|
using Kurisu.AspNetCore.DataAccess.SqlSugar;
|
||||||
|
using SqlSugar;
|
||||||
|
|
||||||
|
namespace Dlhis.Entity.Device.Entities;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 设备与电子围栏关系表
|
||||||
|
/// </summary>
|
||||||
|
[SugarTable("ElectronicFenceDeviceRelationEntity")]
|
||||||
|
[SugarIndex("idx_ElectronicFenceDeviceRelation_DeviceCode_EFenceCode", new[] { nameof(DeviceCode), nameof(EFenceCode) }, new[] { OrderByType.Asc, OrderByType.Asc }, false)]
|
||||||
|
public class EFenceDeviceRelationEntity : SugarBaseEntity, ISoftDeleted
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 设备ID
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(IsNullable = false)]
|
||||||
|
public Guid DeviceCode { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 电子围栏ID
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(IsNullable = false)]
|
||||||
|
public Guid EFenceCode { get; set; }
|
||||||
|
|
||||||
|
public bool IsDeleted { get; set; }
|
||||||
|
}
|
||||||
28
Src/Dlhis.Entity/Device/Entities/EFenceEntity.cs
Normal file
28
Src/Dlhis.Entity/Device/Entities/EFenceEntity.cs
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
using Kurisu.AspNetCore.DataAccess.SqlSugar;
|
||||||
|
using Mapster;
|
||||||
|
using SqlSugar;
|
||||||
|
|
||||||
|
namespace Dlhis.Entity.Device.Entities;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 电子围栏
|
||||||
|
/// </summary>
|
||||||
|
[SugarTable("ElectronicFence")]
|
||||||
|
public class EFenceEntity : SugarBaseEntity
|
||||||
|
{
|
||||||
|
[AdaptIgnore(MemberSide.Source)]
|
||||||
|
[SugarColumn(IsNullable = false)]
|
||||||
|
public Guid Code { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 围栏名称
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(IsNullable = false)]
|
||||||
|
public string Name { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 描述/备注
|
||||||
|
/// </summary>
|
||||||
|
[SugarColumn(IsNullable = true, Length = 1000)]
|
||||||
|
public string Description { get; set; }
|
||||||
|
}
|
||||||
14
Src/Dlhis.Entity/Dormitory/Entity/DormitoryRoomEntity.cs
Normal file
14
Src/Dlhis.Entity/Dormitory/Entity/DormitoryRoomEntity.cs
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
using Kurisu.AspNetCore.DataAccess.SqlSugar;
|
||||||
|
using SqlSugar;
|
||||||
|
|
||||||
|
namespace Dlhis.Entity.Dormitory.Entity;
|
||||||
|
|
||||||
|
[SugarTable(TableName = "DormitoryRoom")]
|
||||||
|
public class DormitoryRoomEntity : SugarBaseEntity
|
||||||
|
{
|
||||||
|
public Guid EFenceCode { get; set; }
|
||||||
|
public string RoomId { get; set; }
|
||||||
|
public string RoomNo { get; set; }
|
||||||
|
public string HotelId { get; set; }
|
||||||
|
public bool PowerSwitch { get; set; }
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
using Kurisu.AspNetCore.DataAccess.Entity;
|
||||||
|
using Kurisu.AspNetCore.DataAccess.SqlSugar;
|
||||||
|
using SqlSugar;
|
||||||
|
|
||||||
|
namespace Dlhis.Entity.Dormitory.Entity;
|
||||||
|
|
||||||
|
[SugarTable(TableName = "DormitoryRoomPerson")]
|
||||||
|
public class DormitoryRoomPersonEntity : SugarBaseEntity, ISoftDeleted
|
||||||
|
{
|
||||||
|
public string RoomId { get; set; }
|
||||||
|
public string UserCode { get; set; }
|
||||||
|
public string UserName { get; set; }
|
||||||
|
public bool? In { get; set; }
|
||||||
|
public bool IsDeleted { get; set; }
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user