Files
jinko.yikatong/Src/Dlhis.Basic/Organization/Services/Implements/GainfoFingerprintService.cs
2026-03-13 15:42:36 +08:00

118 lines
4.3 KiB
C#

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<FingerprintItem>
{
new FingerprintItem
{
FingerNum = fingerNum,
Fingerprint = fingerprint
}
}
});
}
public async Task CollectFingerprintAsync(FingerprintBatchCollectRequest request)
{
var gainfo = await _dbContext.Queryable<GainfoEntity>().Where(x => x.Code == request.UserCode).SingleAsync();
gainfo.ThrowIfNull("人员不存在");
gainfo.CardNo.IsEmpty().ThrowIfTrue("人员未绑定卡号,无法采集指纹");
foreach (var item in request.Fingerprints)
{
var gainfoFingerprint = await _dbContext.Queryable<GainfoFingerprintEntity>().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<DeviceEntity>()
.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<GainfoFingerprintResponse> GetFingerprintAsync(string userCode, int? fingerNum)
{
var gainfo = await _dbContext.Queryable<GainfoEntity>()
.LeftJoin<DepartmentEntity>((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<GainfoFingerprintEntity>().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()
};
}
}