using Dlhis.Basic.Device.Services; using Dlhis.Basic.Organization.Request; using Dlhis.Basic.Organization.Response; using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Device.Entities; using Dlhis.Entity.Device.Enums; using Kurisu.AspNetCore.DataAccess.SqlSugar.Services; using Kurisu.AspNetCore.Utils.Extensions; namespace Dlhis.Basic.Organization.Services.Implements; public class GainfoFingerprintService : IGainfoFingerprintService { private readonly IDbContext _dbContext; private readonly IDevicePermissionService _devicePermissionService; public GainfoFingerprintService(IDbContext dbContext, IDevicePermissionService devicePermissionService) { _dbContext = dbContext; _devicePermissionService = devicePermissionService; } public async Task CollectFingerprintAsync(string userCode, int fingerNum, string fingerprint) { await CollectFingerprintAsync(new FingerprintBatchCollectRequest { UserCode = userCode, Fingerprints = new List { new FingerprintItem { FingerNum = fingerNum, Fingerprint = fingerprint } } }); } public async Task CollectFingerprintAsync(FingerprintBatchCollectRequest request) { var gainfo = await _dbContext.Queryable().Where(x => x.Code == request.UserCode).SingleAsync(); gainfo.ThrowIfNull("人员不存在"); gainfo.CardNo.IsEmpty().ThrowIfTrue("人员未绑定卡号,无法采集指纹"); foreach (var item in request.Fingerprints) { var gainfoFingerprint = await _dbContext.Queryable().Where(x => x.UserCode == request.UserCode && x.FingerNum == item.FingerNum).FirstAsync(); if (gainfoFingerprint == null) { gainfoFingerprint = new GainfoFingerprintEntity { UserCode = request.UserCode, FingerNum = item.FingerNum, Fingerprint = item.Fingerprint }; await _dbContext.InsertAsync(gainfoFingerprint); } else { gainfoFingerprint.Fingerprint = item.Fingerprint; await _dbContext.UpdateAsync(gainfoFingerprint); } } var deviceCodes = await _devicePermissionService.GetUserDeviceCodesByNoOrCodeAsync(request.UserCode); var devices = await _dbContext.Queryable() .Where(x => x.IsElevatorAcs) .Where(x => deviceCodes.Contains(x.Code)) .ToListAsync(); await _dbContext.InsertAsync(devices.Select(x => new DeviceTaskEntity { DeviceUniqueNo = x.UniqueNo, Status = DeviceTaskStatusEnumType.Wait, Type = DeviceTaskEnumType.Add, DeviceType = x.Type, UserNo = gainfo.No, UserId = gainfo.Id, Priority = 0, Version = 0, TenantId = x.TenantId, Source = "指纹采集下发" }).ToList()); } public async Task GetFingerprintAsync(string userCode, int? fingerNum) { var gainfo = await _dbContext.Queryable() .LeftJoin((x, dept) => x.DepartmentNo == dept.No) .Where(x => x.Code == userCode) .Select((x, dept) => new { x.Code, x.Name, x.DepartmentNo, DepartmentName = dept.Name }) .FirstAsync(); gainfo.ThrowIfNull("人员不存在"); var fingerprins = await _dbContext.Queryable().Where(x => x.UserCode == userCode).OrderBy(x => x.FingerNum).ToListAsync(); return new GainfoFingerprintResponse { UserCode = gainfo.Code, UserName = gainfo.Name, DepartmentNo = gainfo.DepartmentNo, DepartmentName = gainfo.DepartmentName, Fingerprints = fingerprins.Select(x => new FingerprintResponse { FingerNum = x.FingerNum, Fingerprint = x.Fingerprint }).ToList() }; } }