118 lines
4.3 KiB
C#
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()
|
|
};
|
|
}
|
|
}
|