fix 可获取记录设备保存时候自动产生初始日志

This commit is contained in:
2024-03-01 12:03:28 +08:00
parent dc1ba173d1
commit 0dc2192dad
11 changed files with 95 additions and 17 deletions

View File

@@ -1,8 +1,6 @@
using System.Diagnostics; using Dlhis.Basic.Device.Request;
using Dlhis.Basic.Device.Request;
using Dlhis.Basic.Device.Response; using Dlhis.Basic.Device.Response;
using Dlhis.Basic.Device.Services; using Dlhis.Basic.Device.Services;
using Dlhis.Basic.Packs;
using Kurisu.AspNetCore.DataAccess.SqlSugar.Aop; using Kurisu.AspNetCore.DataAccess.SqlSugar.Aop;
using Kurisu.Core.DataAccess.Dto; using Kurisu.Core.DataAccess.Dto;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;

View File

@@ -5,7 +5,6 @@ using Dlhis.Entity.Canteen.Entities;
using Dlhis.Entity.Canteen.Enums; using Dlhis.Entity.Canteen.Enums;
using Dlhis.Entity.Device.Entities; using Dlhis.Entity.Device.Entities;
using Dlhis.Entity.Device.Enums; using Dlhis.Entity.Device.Enums;
using Kurisu.AspNetCore.Scope;
using Kurisu.AspNetCore.UnifyResultAndValidation; using Kurisu.AspNetCore.UnifyResultAndValidation;
using Kurisu.AspNetCore.Utils.Extensions; using Kurisu.AspNetCore.Utils.Extensions;
using Kurisu.Core.DataAccess.Dto; using Kurisu.Core.DataAccess.Dto;
@@ -92,9 +91,10 @@ public class DeviceService : IDeviceService
var template = await CheckTemplateExistsAsync(request.TemplateCode); var template = await CheckTemplateExistsAsync(request.TemplateCode);
await CheckTemplateFieldAsync(request.TemplateCode, request.ConnectionInfo); await CheckTemplateFieldAsync(request.TemplateCode, request.ConnectionInfo);
DeviceEntity entity = null;
if (!request.Id.HasValue) if (!request.Id.HasValue)
{ {
var entity = request.Adapt<DeviceEntity>(); entity = request.Adapt<DeviceEntity>();
entity.Code = Guid.NewGuid(); entity.Code = Guid.NewGuid();
await _dbContext.InsertAsync(entity); await _dbContext.InsertAsync(entity);
//同时保存注册信息 //同时保存注册信息
@@ -115,7 +115,7 @@ public class DeviceService : IDeviceService
} }
else else
{ {
var entity = await _dbContext.Queryable<DeviceEntity>().Where(x => x.Id == request.Id).FirstAsync(); entity = await _dbContext.Queryable<DeviceEntity>().Where(x => x.Id == request.Id).FirstAsync();
entity.ThrowIfNull("设备不存在,无法更新"); entity.ThrowIfNull("设备不存在,无法更新");
//分类发生变化,检查是否存在分组 //分类发生变化,检查是否存在分组
@@ -130,15 +130,42 @@ public class DeviceService : IDeviceService
existsG.ThrowIfTrue("存在设备分组,不可修改设备分类"); existsG.ThrowIfTrue("存在设备分组,不可修改设备分类");
} }
var uniqueNo = entity.UniqueNo; request.Adapt(entity);
request.Adapt(entity).UniqueNo = uniqueNo;
await _dbContext.UpdateAsync(entity); await _dbContext.UpdateAsync(entity);
} }
await GenerateUploadRecordLogForBeginTimeAsync(entity);
} }
//******************************************************** help methods ********************************************************** //******************************************************** help methods **********************************************************
private async Task GenerateUploadRecordLogForBeginTimeAsync(DeviceEntity entity)
{
if (entity.Type == DeviceTypeEnumType.Door || entity.Type == DeviceTypeEnumType.Attendance)
{
var exists = await _dbContext.Queryable<DeviceUploadLogEntity>()
.Where(x => x.DeviceUniqueNo == entity.UniqueNo)
.Where(x => x.Type == DeviceUploadLogTypeEnumType.Raise)
.AnyAsync();
if (!exists)
{
await _dbContext.InsertAsync(new DeviceUploadLogEntity
{
DeviceUniqueNo = entity.UniqueNo,
Type = DeviceUploadLogTypeEnumType.Raise,
UserUniqueNo = string.Empty,
RaiseDateTime = entity.CreateTime,
CreatedBy = 1,
CreateTime = DateTime.Now,
ModifiedBy = 1,
ModifiedTime = DateTime.Now,
});
}
}
}
/// <summary> /// <summary>
/// 检查设备模板是否存在 /// 检查设备模板是否存在
/// </summary> /// </summary>
@@ -230,6 +257,7 @@ public class DeviceService : IDeviceService
{ {
var devices = await _dbContext.Queryable<DeviceEntity>() var devices = await _dbContext.Queryable<DeviceEntity>()
.Where(x => x.Enable) .Where(x => x.Enable)
.Where(x => x.Type == DeviceTypeEnumType.Attendance || (x.Type == DeviceTypeEnumType.Door && x.AsAttendance))
.Select(x => new DeviceResponse .Select(x => new DeviceResponse
{ {
FuncsStr = x.Funcs.ToString() FuncsStr = x.Funcs.ToString()

View File

@@ -1,6 +1,7 @@
using Dlhis.Entity.Device.Enums; using Dlhis.Entity.Device.Enums;
using Kurisu.Core.DataAccess.Entity; using Kurisu.Core.DataAccess.Entity;
using Kurisu.SqlSugar; using Kurisu.SqlSugar;
using Mapster;
using SqlSugar; using SqlSugar;
using SqlSugar.DbConvert; using SqlSugar.DbConvert;
@@ -21,6 +22,7 @@ public class DeviceEntity : SugarBaseEntity, ITenantId
/// <summary> /// <summary>
/// 设备唯一码,IP/MAC/SNO /// 设备唯一码,IP/MAC/SNO
/// </summary> /// </summary>
[AdaptIgnore(MemberSide.Destination)]
[SugarColumn(ColumnDescription = "设备唯一码", UniqueGroupNameList = new[] { "Idx_Device_UniqueNo" })] [SugarColumn(ColumnDescription = "设备唯一码", UniqueGroupNameList = new[] { "Idx_Device_UniqueNo" })]
public string UniqueNo { get; set; } public string UniqueNo { get; set; }

View File

@@ -45,4 +45,16 @@ public class DeviceUploadLogsController : ControllerBase
{ {
await _deviceUploadLogService.UploadLogsAsync(requests); await _deviceUploadLogService.UploadLogsAsync(requests);
} }
/// <summary>
/// 设置设备获取记录开始时间
/// </summary>
/// <param name="requests"></param>
/// <returns></returns>
[HttpPost("reset-begintime")]
[Transactional]
public async Task SetUploadLogsBeginDateTime(List<SetUploadLogsBeginDateTimeRequest> requests)
{
await _deviceUploadLogService.SetUploadLogsBeginDateTimeAsync(requests);
}
} }

View File

@@ -0,0 +1,17 @@
using System.ComponentModel.DataAnnotations;
namespace Dlhis.ScheduledTask.DeviceUploadLog.Request;
public class SetUploadLogsBeginDateTimeRequest
{
/// <summary>
/// 设备号不能为空
/// </summary>
[Required(ErrorMessage = "设备号不能为空")]
public string DeviceUniqueNo { get; set; }
/// <summary>
/// 开始时间
/// </summary>
public DateTime Begin { get; set; }
}

View File

@@ -10,4 +10,5 @@ public interface IDeviceUploadLogService : IScopeDependency
Task UploadLogsAsync(List<DeviceUploadLogUploadRequest> requests); Task UploadLogsAsync(List<DeviceUploadLogUploadRequest> requests);
Task SetUploadLogsBeginDateTimeAsync(List<SetUploadLogsBeginDateTimeRequest> requests);
} }

View File

@@ -1,6 +1,7 @@
using System.Linq.Expressions; using System.Linq.Expressions;
using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Basic.Entity;
using Dlhis.Entity.Device.Entities; using Dlhis.Entity.Device.Entities;
using Dlhis.Entity.Device.Enums;
using Dlhis.ScheduledTask.DeviceUploadLog.Request; using Dlhis.ScheduledTask.DeviceUploadLog.Request;
using Dlhis.ScheduledTask.DeviceUploadLog.Response; using Dlhis.ScheduledTask.DeviceUploadLog.Response;
using Kurisu.AspNetCore.Utils.Extensions; using Kurisu.AspNetCore.Utils.Extensions;
@@ -95,4 +96,29 @@ public class DeviceUploadLogService : IDeviceUploadLogService
await _dbContext.InsertAsync(records); await _dbContext.InsertAsync(records);
} }
public async Task SetUploadLogsBeginDateTimeAsync(List<SetUploadLogsBeginDateTimeRequest> requests)
{
var uniqueNos = requests.DistinctBy(x => x.DeviceUniqueNo).Select(x => x.DeviceUniqueNo).ToList();
var devices = await _dbContext.Queryable<DeviceEntity>()
.Where(x => uniqueNos.Contains(x.UniqueNo))
.Where(x => x.Type == DeviceTypeEnumType.Attendance || x.Type == DeviceTypeEnumType.Door)
.ToListAsync();
(uniqueNos.Count != devices.Count).ThrowIfTrue("存在非考勤和门禁的设备");
var tenantId = devices.FirstOrDefault().TenantId;
var logs = new List<DeviceUploadLogEntity>(requests.Count);
foreach (var request in requests)
{
logs.Add(new DeviceUploadLogEntity
{
DeviceUniqueNo = request.DeviceUniqueNo,
Type = DeviceUploadLogTypeEnumType.Raise,
RaiseDateTime = request.Begin,
TenantId = tenantId
});
}
await _dbContext.InsertAsync(logs);
}
} }

View File

@@ -30,7 +30,7 @@ public class JobPack : BaseAppPack
TimeZone = TimeZoneInfo.Local TimeZone = TimeZoneInfo.Local
}); });
//创建设备获取考勤的任务 //创建设备获取的任务
RecurringJob.AddOrUpdate<CreateGetUploadRecordJob>("CreateGetUploadRecord", s => s.RunAsync(), "0 0/1 * * * ?", new RecurringJobOptions RecurringJob.AddOrUpdate<CreateGetUploadRecordJob>("CreateGetUploadRecord", s => s.RunAsync(), "0 0/1 * * * ?", new RecurringJobOptions
{ {
TimeZone = TimeZoneInfo.Local TimeZone = TimeZoneInfo.Local

View File

@@ -25,8 +25,7 @@ public class CreateGetUploadRecordJob
{ {
var devices = await _dbContext.Queryable<DeviceEntity>() var devices = await _dbContext.Queryable<DeviceEntity>()
.Where(x => x.Enable) .Where(x => x.Enable)
.Where(x => x.Type == DeviceTypeEnumType.Attendance || (x.Type == DeviceTypeEnumType.Door && x.AsAttendance) .Where(x => x.Type == DeviceTypeEnumType.Attendance || x.Type == DeviceTypeEnumType.Door)
|| x.Type == DeviceTypeEnumType.Door)
.ToListAsync(); .ToListAsync();
//过滤处理中的任务 //过滤处理中的任务

View File

@@ -315,11 +315,6 @@ public class AssignmentService : IAssignmentService
requests = requests.Where(x => taskIds.Contains(x.TaskId)).ToList(); requests = requests.Where(x => taskIds.Contains(x.TaskId)).ToList();
deviceTasks.ForEach(x =>
{
});
var now = DateTime.Now; var now = DateTime.Now;
var tasks = new List<DeviceTaskEntity>(requests.Count); var tasks = new List<DeviceTaskEntity>(requests.Count);
foreach (var request in requests) foreach (var request in requests)