fix 访客预约代码调整

This commit is contained in:
2024-10-10 18:02:10 +08:00
parent cce6785863
commit 33dbc33836
20 changed files with 585 additions and 70 deletions

View File

@@ -1,12 +1,12 @@
using Dlhis.Visitor.Appointment.Request;
using Dlhis.Visitor.Appointment.Response;
using Dlhis.Visitor.Appointment.Services;
using Dlhis.Basic.Appointment.Request;
using Dlhis.Basic.Appointment.Response;
using Dlhis.Basic.Appointment.Services;
using Kurisu.AspNetCore.DataAccess.Dto;
using Kurisu.AspNetCore.DataAccess.SqlSugar.Aop;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace Dlhis.Visitor.Appointment.Controllers;
namespace Dlhis.Basic.Appointment.Controllers;
/// <summary>
/// 预约区域
@@ -16,24 +16,13 @@ namespace Dlhis.Visitor.Appointment.Controllers;
[ApiController]
public class AppointmentAreasController : ControllerBase
{
private readonly IAppointmentAreaService _apponintmentAreaService;
private readonly IAppointmentAreaService _appointmentAreaService;
public AppointmentAreasController(IAppointmentAreaService apponintmentAreaService)
public AppointmentAreasController(IAppointmentAreaService appointmentAreaService )
{
_apponintmentAreaService = apponintmentAreaService;
_appointmentAreaService = appointmentAreaService;
}
/// <summary>
/// 预约区域
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpGet("page")]
public async Task<Pagination<ApponintmentAreaPageResponse>> GetPageAsync([FromQuery] PageDto request)
{
return await _apponintmentAreaService.GetPageAsync(request);
}
/// <summary>
/// 保存
/// </summary>
@@ -42,19 +31,18 @@ public class AppointmentAreasController : ControllerBase
[HttpPost("save")]
public async Task SaveAsync(AppointmentAreaSaveRequest request)
{
await _apponintmentAreaService.SaveAsync(request);
await _appointmentAreaService.SaveAsync(request);
}
/// <summary>
/// 删除
/// 预约区域分页
/// </summary>
/// <param name="id"></param>
/// <param name="request"></param>
/// <returns></returns>
[HttpDelete("{id}")]
public async Task DeleteAsync(long id)
[HttpGet("page")]
public async Task<Pagination<AppointmentAreaPageResponse>> GetPageAsync([FromQuery] AppointmentAreaPageRequest request)
{
await _apponintmentAreaService.DeleteAsync(id);
return await _appointmentAreaService.GetPageAsync(request);
}
/// <summary>
@@ -65,6 +53,6 @@ public class AppointmentAreasController : ControllerBase
[Transactional]
public async Task AssignAsync(AppointmentAreaAssignRequest request)
{
await _apponintmentAreaService.AssignAsync(request);
await _appointmentAreaService.AssignAsync(request);
}
}

View File

@@ -1,13 +1,13 @@
using System.ComponentModel.DataAnnotations;
using Dlhis.Visitor.Appointment.Request;
using Dlhis.Visitor.Appointment.Response;
using Dlhis.Visitor.Appointment.Services;
using Dlhis.Basic.Appointment.Request;
using Dlhis.Basic.Appointment.Response;
using Dlhis.Basic.Appointment.Services;
using Kurisu.AspNetCore.DataAccess.Dto;
using Kurisu.AspNetCore.DataAccess.SqlSugar.Aop;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace Dlhis.Visitor.Appointment.Controllers;
namespace Dlhis.Basic.Appointment.Controllers;
/// <summary>
/// 预约
@@ -23,7 +23,7 @@ public class AppointmentsController : ControllerBase
{
_appointmentService = appointmentService;
}
/// <summary>
/// 预约申请分页
/// </summary>
@@ -41,6 +41,7 @@ public class AppointmentsController : ControllerBase
/// <param name="request"></param>
/// <returns></returns>
[HttpPost("confirm")]
[Transactional]
public async Task ConfirmAsync(AppointmentConfirmRequest request)
{
await _appointmentService.ConfirmAsync(request);
@@ -54,9 +55,8 @@ public class AppointmentsController : ControllerBase
[AllowAnonymous]
[HttpGet("today")]
public async Task<AppointmentDetailResponse> GetTodayByIdNoAsync(
[FromQuery]
[StringLength(18, MinimumLength = 18, ErrorMessage = "身份证有误")]
[Required(ErrorMessage = "身份证有误")]string idNo)
[FromQuery] [StringLength(18, MinimumLength = 18, ErrorMessage = "身份证有误")] [Required(ErrorMessage = "身份证有误")]
string idNo)
{
return await _appointmentService.GetTodayByIdNoAsync(idNo);
}
@@ -72,4 +72,4 @@ public class AppointmentsController : ControllerBase
{
return await _appointmentService.GetRecordPageByIdNoAsync(request);
}
}
}

View File

@@ -1,6 +1,6 @@
using System.ComponentModel.DataAnnotations;
namespace Dlhis.Visitor.Appointment.Dto;
namespace Dlhis.Basic.Appointment.Dto;
public class AppointmentReceiveItemDto
{

View File

@@ -1,6 +1,6 @@
using System.ComponentModel.DataAnnotations;
namespace Dlhis.Visitor.Appointment.Request;
namespace Dlhis.Basic.Appointment.Request;
public class AppointmentAreaAssignRequest
{
@@ -14,4 +14,4 @@ public class AppointmentAreaAssignRequest
/// 分组
/// </summary>
public List<Guid> DeviceCodes { get; set; }
}
}

View File

@@ -0,0 +1,14 @@
using System.ComponentModel.DataAnnotations;
using Dlhis.Entity.Visitor.Enums;
using Kurisu.AspNetCore.DataAccess.Dto;
namespace Dlhis.Basic.Appointment.Request;
public class AppointmentAreaPageRequest : PageDto
{
/// <summary>
/// 区域类型
/// </summary>
[EnumDataType(typeof(AppointmentAreaEnumType))]
public AppointmentAreaEnumType? Type { get; set; }
}

View File

@@ -1,7 +1,7 @@
using System.ComponentModel.DataAnnotations;
using Dlhis.Entity.Visitor.Enums;
namespace Dlhis.Visitor.Appointment.Request;
namespace Dlhis.Basic.Appointment.Request;
public class AppointmentAreaSaveRequest
{
@@ -17,13 +17,13 @@ public class AppointmentAreaSaveRequest
public AppointmentAreaEnumType Type { get; set; }
/// <summary>
/// 预期编码
/// 编码
/// </summary>
[Required]
[Required(ErrorMessage = "编码不能为空")]
public string CustomCode { get; set; }
/// <summary>
/// 姓名
/// 名称
/// </summary>
[Required]
public string Name { get; set; }
@@ -32,4 +32,4 @@ public class AppointmentAreaSaveRequest
/// 备注
/// </summary>
public string Remark { get; set; }
}
}

View File

@@ -1,4 +1,4 @@
namespace Dlhis.Visitor.Appointment.Request;
namespace Dlhis.Basic.Appointment.Request;
public class AppointmentConfirmRequest
{

View File

@@ -1,7 +1,7 @@
using System.ComponentModel.DataAnnotations;
using Kurisu.AspNetCore.DataAccess.Dto;
namespace Dlhis.Visitor.Appointment.Request;
namespace Dlhis.Basic.Appointment.Request;
public class AppointmentIdNoPageRequest : PageDto
{

View File

@@ -0,0 +1,20 @@
using System.ComponentModel.DataAnnotations;
using Kurisu.AspNetCore.CustomClass;
using Kurisu.AspNetCore.DataAccess.Dto;
namespace Dlhis.Basic.Appointment.Request;
public class AppointmentPageRequest : PageDto , IValidatableObject
{
public DateTimePeriod SearchDateTimePeriod { get; set; }
/// <inheritdoc />
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (SearchDateTimePeriod.HasValue())
{
SearchDateTimePeriod.End = SearchDateTimePeriod.End!.Value.AddDays(1).AddSeconds(-1);
}
yield break;
}
}

View File

@@ -1,7 +1,7 @@
using System.ComponentModel.DataAnnotations;
using Dlhis.Visitor.Appointment.Dto;
using Dlhis.Basic.Appointment.Dto;
namespace Dlhis.Visitor.Appointment.Request;
namespace Dlhis.Basic.Appointment.Request;
public class AppointmentReceiveRequest : IValidatableObject
{

View File

@@ -1,17 +1,17 @@
using Dlhis.Entity.Visitor.Enums;
using Kurisu.AspNetCore.Utils.Extensions;
namespace Dlhis.Visitor.Appointment.Response;
namespace Dlhis.Basic.Appointment.Response;
public class ApponintmentAreaPageResponse
public class AppointmentAreaPageResponse
{
public long Id { get; set; }
/// <summary>
/// 区域类型
/// </summary>
public AppointmentAreaEnumType Type { get; set; }
/// <summary>
/// 区域类型
/// </summary>
@@ -21,7 +21,7 @@ public class ApponintmentAreaPageResponse
/// 自定义编码
/// </summary>
public string CustomCode { get; set; }
/// <summary>
/// 名称
/// </summary>
@@ -31,4 +31,4 @@ public class ApponintmentAreaPageResponse
/// 备注
/// </summary>
public string Remark { get; set; }
}
}

View File

@@ -0,0 +1,102 @@
using Dlhis.Entity.Visitor.Enums;
namespace Dlhis.Basic.Appointment.Response;
public class AppointmentDetailResponse
{
/// <summary>
/// 流水号
/// </summary>
public string No { get; set; }
/// <summary>
/// no
/// </summary>
public string UserNo { get; set; }
/// <summary>
/// 证件类型
/// </summary>
public string IdType { get; set; }
/// <summary>
/// 证件号
/// </summary>
public string IdNo { get; set; }
/// <summary>
/// 访客名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 手机号
/// </summary>
public string Phone { get; set; }
/// <summary>
/// 车牌
/// </summary>
public string LicensePlate { get; set; }
/// <summary>
/// 进入门岗
/// </summary>
public bool IsEnterDoorArea { get; set; }
/// <summary>
/// 预约门禁区域
/// </summary>
public string ApplyDoorArea { get; set; }
/// <summary>
/// 访客开始
/// </summary>
public DateTime DoorStart { get; set; }
/// <summary>
/// 访问结束
/// </summary>
public DateTime DoorEnd { get; set; }
/// <summary>
/// 是否进入车间
/// </summary>
public bool IsEnterWorkplace { get; set; }
/// <summary>
/// 申请车间区域
/// </summary>
public List<string> ApplyWorkplaceAreas { get; set; }
/// <summary>
/// 车间访问开始
/// </summary>
public DateTime? WorkplaceStart { get; set; }
/// <summary>
/// 车间访问结束
/// </summary>
public DateTime? WorkplaceEnd { get; set; }
/// <summary>
/// 社保照片url
/// </summary>
public string ImageUrl { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remark { get; set; }
/// <summary>
/// 门禁状态
/// </summary>
public VisitorAppointmentDetailStatusEnumType DoorStatus { get; set; }
/// <summary>
/// 车间状态
/// </summary>
public VisitorAppointmentDetailStatusEnumType WorkplaceStatus { get; set; }
}

View File

@@ -0,0 +1,41 @@
namespace Dlhis.Basic.Appointment.Response;
public class AppointmentPageResponse
{
public string No { get; set; }
/// <summary>
/// 标题
/// </summary>
public string Title { get; set; }
/// <summary>
/// 对接人工号
/// </summary>
public string Code { get; set; }
/// <summary>
/// 来访人来源/公司
/// </summary>
public string Source { get; set; }
/// <summary>
/// 申请时间
/// </summary>
public DateTime Date { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remark { get; set; }
/// <summary>
/// 预约厂区
/// </summary>
public string Factory { get; set; }
/// <summary>
/// 申请事由
/// </summary>
public string Reason { get; set; }
}

View File

@@ -0,0 +1,29 @@
using Dlhis.Basic.Appointment.Request;
using Dlhis.Basic.Appointment.Response;
using Kurisu.AspNetCore.DataAccess.Dto;
namespace Dlhis.Basic.Appointment.Services;
public interface IAppointmentAreaService : IScopeDependency
{
/// <summary>
/// 区域分页
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
Task<Pagination<AppointmentAreaPageResponse>> GetPageAsync(AppointmentAreaPageRequest request);
/// <summary>
/// 保存区域
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
Task SaveAsync(AppointmentAreaSaveRequest request);
/// <summary>
/// 分配设备组到区域
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
Task AssignAsync(AppointmentAreaAssignRequest request);
}

View File

@@ -1,9 +1,9 @@
using Dlhis.Visitor.Appointment.Request;
using Dlhis.Visitor.Appointment.Response;
using Dlhis.Basic.Appointment.Request;
using Dlhis.Basic.Appointment.Response;
using Kurisu.AspNetCore.DataAccess.Dto;
using Microsoft.AspNetCore.Mvc;
namespace Dlhis.Visitor.Appointment.Services;
namespace Dlhis.Basic.Appointment.Services;
public interface IAppointmentService : IScopeDependency
{
@@ -17,9 +17,9 @@ public interface IAppointmentService : IScopeDependency
/// <summary>
/// 查看明细
/// </summary>
/// <param name="id"></param>
/// <param name="no"></param>
/// <returns></returns>
Task<List<AppointmentDetailResponse>> GetAppointmentDetailsByIdAsync(long id);
Task<List<AppointmentDetailResponse>> GetAppointmentDetailsByIdAsync(string no);
/// <summary>
/// 确认到达

View File

@@ -0,0 +1,180 @@
using Dlhis.Basic.Appointment.Request;
using Dlhis.Basic.Appointment.Response;
using Dlhis.Entity.Basic.Entity;
using Dlhis.Entity.Device.Entities;
using Dlhis.Entity.Device.Enums;
using Dlhis.Entity.Visitor.Entity;
using Dlhis.Entity.Visitor.Enums;
using Kurisu.AspNetCore.DataAccess.Dto;
using Kurisu.AspNetCore.DataAccess.SqlSugar.Extensions;
using Kurisu.AspNetCore.DataAccess.SqlSugar.Services;
using Kurisu.AspNetCore.Utils.Extensions;
using Mapster;
namespace Dlhis.Basic.Appointment.Services.Implements;
public class AppointmentAreaService : IAppointmentAreaService
{
private readonly IDbContext _dbContext;
public AppointmentAreaService(IDbContext dbContext)
{
_dbContext = dbContext;
}
public async Task SaveAsync(AppointmentAreaSaveRequest request)
{
if (!request.Id.HasValue)
{
var entity = request.Adapt<AppointmentAreaEntity>();
entity.CustomCode = request.CustomCode;
entity.Type = request.Type;
await _dbContext.InsertAsync(entity);
}
else
{
var entity = await _dbContext.Queryable<AppointmentAreaEntity>().Where(x => x.Id == request.Id).SingleAsync();
entity.ThrowIfNull("预约区域不存在");
request.Adapt(entity);
await _dbContext.UpdateAsync(entity);
}
}
public async Task<Pagination<AppointmentAreaPageResponse>> GetPageAsync(AppointmentAreaPageRequest request)
{
return await _dbContext.Queryable<AppointmentAreaEntity>()
.WhereIF(request.Type.HasValue, x => x.Type == request.Type)
.WhereIF(request.Search.IsPresent(), x => x.CustomCode == request.Search || x.Name.Contains(request.Search))
.Select<AppointmentAreaPageResponse>()
.ToPageListAsync(request);
}
public async Task AssignAsync(AppointmentAreaAssignRequest request)
{
(await _dbContext.Queryable<AppointmentAreaEntity>().Where(x => x.CustomCode == request.CustomCode).AnyAsync())
.ThrowIfFalse("区域不存在");
var userBeforePermissions = await GetMyPermissionsAsync(request.CustomCode);
var userNos = userBeforePermissions.Select(x => x.Key).ToList();
//删除原来的配置
await _dbContext.Client.Deleteable<AppointmentAreaAssignmentEntity>()
.Where(x => x.CustomCode == request.CustomCode)
.ExecuteCommandAsync();
//添加当前区域的设置
var data = request.DeviceCodes.Select(x => new AppointmentAreaAssignmentEntity
{
CustomCode = request.CustomCode,
DeviceCode = x
}).ToList();
await _dbContext.InsertAsync(data);
var userCurrentPermissions = await GetMyPermissionsAsync(request.CustomCode);
var allDeviceCodes = userCurrentPermissions.SelectMany(x => x.Value);
var devices = await _dbContext.Queryable<DeviceEntity>().Where(x => allDeviceCodes.Contains(x.Code)).ToListAsync();
var tasks = new List<DeviceTaskEntity>();
foreach (var userNo in userNos)
{
var before = userBeforePermissions[userNo];
var current = userCurrentPermissions[userNo];
//被删除
var deletedItems = before.Where(x => !current.Contains(x)).ToList();
//新增
var addItems = current.Where(x => !before.Contains(x)).ToList();
if (!deletedItems.Any() && !addItems.Any())
{
continue;
}
tasks.AddRange(deletedItems.Select(x => new DeviceTaskEntity
{
Type = DeviceTaskEnumType.Delete,
DeviceType = DeviceTypeEnumType.Door,
UserNo = userNo,
DeviceUniqueNo = devices.First(item => item.Code == x).UniqueNo,
Status = DeviceTaskStatusEnumType.Wait,
Version = 0,
CancellationId = 0,
Source = DeviceTaskSourceEnumType.Appointment,
Priority = 99
}));
tasks.AddRange(addItems.Select(x => new DeviceTaskEntity
{
Type = DeviceTaskEnumType.Add,
DeviceType = DeviceTypeEnumType.Door,
UserNo = userNo,
DeviceUniqueNo = devices.First(item => item.Code == x).UniqueNo,
Status = DeviceTaskStatusEnumType.Wait,
Version = 0,
CancellationId = 0,
Source = DeviceTaskSourceEnumType.Appointment,
Priority = 99
}));
}
await _dbContext.InsertAsync(tasks);
}
//********************************************************* help methods ***************************************************************
private async Task<Dictionary<string, List<Guid>>> GetMyPermissionsAsync(string areaCode)
{
//获取已经到达的数据
var arrivedInfos = await _dbContext.Queryable<VisitorAppointmentDetailEntity>()
.Where(x => x.DoorStatus == VisitorAppointmentDetailStatusEnumType.Arrived || x.WorkplaceStatus == VisitorAppointmentDetailStatusEnumType.Arrived)
.Select(x => new
{
x.UserNo,
x.DoorStatus,
x.WorkplaceStatus,
x.IsEnterDoorArea,
x.ApplyDoorArea,
x.IsEnterWorkplace,
x.ApplyWorkplaceAreas
})
.ToListAsync();
var userAreaCodes = arrivedInfos.GroupBy(x => x.UserNo).ToDictionary(p => p.Key, ls =>
{
return ls.SelectMany(x =>
{
var list = new List<string>();
if (x.DoorStatus == VisitorAppointmentDetailStatusEnumType.Arrived)
{
list.Add(x.ApplyDoorArea);
}
if (x.WorkplaceStatus == VisitorAppointmentDetailStatusEnumType.Arrived)
{
list.AddRange(x.ApplyWorkplaceAreas);
}
return list;
});
});
userAreaCodes = userAreaCodes.Where(x => x.Value.Contains(areaCode)).ToDictionary(x => x.Key, x => x.Value);
var userBeforePermissions = new Dictionary<string, List<Guid>>(userAreaCodes.Count);
foreach ((string currentUserNo, IEnumerable<string> currentUseAreaCode) in userAreaCodes)
{
var deviceCodes = await _dbContext.Queryable<AppointmentAreaAssignmentEntity>()
.Where(x => currentUseAreaCode.Contains(x.CustomCode))
.Select(x => x.DeviceCode)
.ToListAsync();
userBeforePermissions.Add(currentUserNo, deviceCodes);
}
return userBeforePermissions;
}
}

View File

@@ -0,0 +1,145 @@
using Dlhis.Basic.Appointment.Request;
using Dlhis.Basic.Appointment.Response;
using Dlhis.Entity.Basic.Entity;
using Dlhis.Entity.Device.Entities;
using Dlhis.Entity.Device.Enums;
using Dlhis.Entity.Visitor.Entity;
using Dlhis.Entity.Visitor.Enums;
using Kurisu.AspNetCore.CustomClass;
using Kurisu.AspNetCore.DataAccess.Dto;
using Kurisu.AspNetCore.DataAccess.SqlSugar.Extensions;
using Kurisu.AspNetCore.DataAccess.SqlSugar.Services;
using Kurisu.AspNetCore.Utils.Extensions;
using Microsoft.AspNetCore.DataProtection;
using Microsoft.AspNetCore.Mvc;
using SqlSugar;
namespace Dlhis.Basic.Appointment.Services.Implements;
public class AppointmentService : IAppointmentService
{
private readonly IDbContext _dbContext;
private readonly IDataProtectionProvider _dataProtectionProvider;
public AppointmentService(IDbContext dbContext, IDataProtectionProvider dataProtectionProvider)
{
_dbContext = dbContext;
_dataProtectionProvider = dataProtectionProvider;
}
public async Task<Pagination<AppointmentPageResponse>> GetPageAsync(AppointmentPageRequest request)
{
return await _dbContext.Queryable<VisitorAppointmentEntity>()
.WhereIF(request.SearchDateTimePeriod.HasValue(),
x => x.Date >= request.SearchDateTimePeriod.Start && x.Date <= request.SearchDateTimePeriod.End)
.WhereIF(request.Search.IsPresent(), x => x.Code == request.Search)
.Select<AppointmentPageResponse>()
.ToPageListAsync(request);
}
public async Task<List<AppointmentDetailResponse>> GetAppointmentDetailsByIdAsync(string no)
{
return await _dbContext.Queryable<VisitorAppointmentDetailEntity>()
.Where(x => x.No == no)
.Select<AppointmentDetailResponse>()
.ToListAsync();
}
public async Task ConfirmAsync(AppointmentConfirmRequest request)
{
var detail = await _dbContext.Queryable<VisitorAppointmentDetailEntity>().Where(x => x.Id == request.Id).SingleAsync();
detail.ThrowIfNull("预约信息不存在");
var areaCodes = GetValidAreaCodes(detail);
var existsAreaCodes = await _dbContext.Queryable<AppointmentAreaEntity>().Where(x => areaCodes.Contains(x.CustomCode)).Select(x => x.CustomCode).ToListAsync();
//当前分配的设备codes
var deviceCodes = await _dbContext.Queryable<AppointmentAreaAssignmentEntity>()
.Where(x => existsAreaCodes.Contains(x.CustomCode))
.Select(x => x.DeviceCode)
.ToListAsync();
var deviceUniqueNos = await _dbContext.Queryable<DeviceEntity>().Where(x => deviceCodes.Contains(x.Code)).Select(x => new { x.UniqueNo, x.TenantId }).ToListAsync();
await _dbContext.InsertAsync(deviceUniqueNos.Select(x => new DeviceTaskEntity
{
DeviceType = DeviceTypeEnumType.Door,
DeviceUniqueNo = x.UniqueNo,
Status = DeviceTaskStatusEnumType.Wait,
UserNo = detail.UserNo,
Type = DeviceTaskEnumType.Add,
Priority = 100,
TenantId = x.TenantId,
Source = DeviceTaskSourceEnumType.Appointment,
Version = 0,
}).ToList());
detail.DoorStatus = VisitorAppointmentDetailStatusEnumType.Arrived;
detail.WorkplaceStatus = VisitorAppointmentDetailStatusEnumType.Arrived;
detail.ArrivedTime = DateTime.Now;
await _dbContext.UpdateAsync(detail);
}
private static IEnumerable<string> GetValidAreaCodes(VisitorAppointmentDetailEntity detail)
{
if (detail.IsEnterDoorArea)
{
yield return detail.ApplyDoorArea;
}
if (detail.IsEnterWorkplace)
{
foreach (var item in detail.ApplyWorkplaceAreas)
{
yield return item;
}
}
}
//********************************************************** 用户操作 *******************************************************************
public async Task<AppointmentDetailResponse> GetTodayByIdNoAsync(string idNo)
{
var protector = _dataProtectionProvider.CreateProtector("gainfo:external:idno");
try
{
idNo = protector.Unprotect(idNo);
}
catch (Exception)
{
throw new UserFriendlyException("凭证有误");
}
var now = DateTime.Now;
return await _dbContext.Queryable<VisitorAppointmentDetailEntity>()
.LeftJoin<GainfoEntity>((x, ga) => ga.IdNo == idNo)
.Where((x, ga) => ga.IdNo == idNo)
.Where(x => (x.IsEnterDoorArea && SqlFunc.DateIsSame(x.DoorStart, now)) || (x.IsEnterWorkplace && SqlFunc.DateIsSame(x.WorkplaceStart, now)))
.Select<AppointmentDetailResponse>()
.SingleAsync();
}
public async Task<Pagination<AppointmentDetailResponse>> GetRecordPageByIdNoAsync([FromQuery] AppointmentIdNoPageRequest request)
{
var protector = _dataProtectionProvider.CreateProtector("gainfo:external:idno");
try
{
request.IdNo = protector.Unprotect(request.IdNo);
}
catch (Exception)
{
throw new UserFriendlyException("凭证有误");
}
var page = await _dbContext.Queryable<VisitorAppointmentDetailEntity>()
.LeftJoin<GainfoEntity>((x, ga) => x.UserNo == ga.No)
.Where((x, ga) => ga.IdNo == request.IdNo)
.OrderBy(x => x.CreateTime)
.Select<AppointmentDetailResponse>()
.ToPageListAsync(request);
return page;
}
}

View File

@@ -101,7 +101,7 @@ public class DeviceService : IDeviceService
.Where((dgr, dg) => dgr.DeviceCode == entity.Code)
.AnyAsync();
existsG.ThrowIfTrue("存在设备分组,不可修改设备分类");
existsG.ThrowIfTrue("存在设备分组,不可修改设备类型");
}
request.Adapt(entity);

View File

@@ -104,13 +104,18 @@ public class VisitorAppointmentDetailEntity : SugarBaseEntity
[SugarColumn(ColumnDescription = "备注")]
public string Remark { get; set; }
/// <summary>
/// 门禁状态
/// </summary>
[SugarColumn(IsNullable = false, ColumnDescription = "门禁状态", ColumnDataType = "varchar(50)", SqlParameterDbType = typeof(EnumToStringConvert))]
public VisitorAppointmentDetailStatusEnumType DoorStatus { get; set; }
/// <summary>
/// 到达时间
/// </summary>
[SugarColumn(IsNullable = true)]
public DateTime? ArrivedTime { get; set; }
/// <summary>
/// 车间状态
/// </summary>

View File

@@ -1,9 +0,0 @@
using Kurisu.AspNetCore.CustomClass;
using Kurisu.AspNetCore.DataAccess.Dto;
namespace Dlhis.Visitor.Appointment.Request;
public class AppointmentPageRequest : PageDto
{
public DateTimePeriod SearchDateTimePeriod { get; set; }
}