using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Device.Entities; using Dlhis.Entity.Device.Enums; using Dlhis.Sys.Api; using Dlhis.Sys.Api.Response; using Kurisu.AspNetCore.Utils.Extensions; using Kurisu.Core.DataAccess.Entity; using Kurisu.Scheduled; using Kurisu.Scheduled.Attributes; using Kurisu.SqlSugar.Services; using Newtonsoft.Json; using SqlSugar; namespace Dlhis.ScheduledTask.Jobs; /// /// 创建系统默认分组 /// [RecurringJob(nameof(CreateDefinitelyGroupJob), "0 0 5 * * ?", Name = "创建系统默认分组")] public class CreateDefinitelyGroupJob : BaseJob { private readonly ITenantApi _tenantApi; public CreateDefinitelyGroupJob( ITenantApi tenantApi, IServiceProvider serviceProvider) : base(serviceProvider) { _tenantApi = tenantApi; } private static readonly string _remark = "系统自动生成"; public override async Task RunAsync(IServiceProvider serviceProvider) { //获取所有基地信息 var tenantResult = await _tenantApi.GetTenantsInternalAsync(); var tenants = tenantResult.Data; Logger.LogInformation("获取基地信息:{json}", JsonConvert.SerializeObject(tenants)); //****************************************************系统人员分组**********************************************************/ await CreateGainfoGroupsAsync(tenants); //*****************************************************考勤设备组*********************************************************/ await CreateDeviceGroupAsync(DeviceTypeEnumType.Attendance, new List { "*通用考勤设备组", "*专用考勤设备组" }, tenants); //*****************************************************门禁设备组********************************************************/ await CreateDeviceGroupAsync(DeviceTypeEnumType.Door, new List { "*共用区域", "*非共用区域" }, tenants); } private async Task CreateGainfoGroupsAsync(List tenants) { var grps = new List { "*自定义人员分组", "*督查组", "*X3及以上领导组" }; var searchGrps = await DbContext.Queryable().Where(x => grps.Contains(x.Name)).ToListAsync(); foreach (var grp in grps) { if (!searchGrps.Any(x => x.Name == grp)) { await DbContext.InsertAsync(new GainfoGroupEntity { PCode = null, Code = Guid.NewGuid(), Name = grp, IsDefault = grp.Equals("*自定义人员分组"), Editable = false, Remark = _remark, CreatedBy = 1, CreateTime = DateTime.Now, ModifiedBy = 1, ModifiedTime = DateTime.Now, TenantId = null }); } } } private async Task CreateDeviceGroupAsync(DeviceTypeEnumType type, List topGroups, List tenants) { foreach (var grp in topGroups) { var topGrp = await DbContext.Queryable().FirstAsync(x => x.Name == grp); if (topGrp == null) { topGrp = new DeviceGroupEntity { PCode = null, Code = Guid.NewGuid(), Type = type, Name = grp, Editable = false, AbleSetNext = false, Remark = _remark, CreatedBy = 1, CreateTime = DateTime.Now, ModifiedBy = 1, ModifiedTime = DateTime.Now, TenantId = null, }; await DbContext.InsertAsync(topGrp); } foreach (var workplace in tenants.Where(x => x.PCode.IsEmpty())) { var workplaceName = $"*{type.GetDescription()}工作地系统组({workplace.Name})"; var workplaceGrp = await DbContext.Queryable().Where(x => x.PCode == topGrp.Code).FirstAsync(x => x.Name == workplaceName); if (workplaceGrp == null) { workplaceGrp = new DeviceGroupEntity { PCode = topGrp.Code, Code = Guid.NewGuid(), Type = type, Name = workplaceName, Editable = false, AbleSetNext = false, Remark = _remark, CreatedBy = 1, CreateTime = DateTime.Now, ModifiedBy = 1, ModifiedTime = DateTime.Now, TenantId = null, }; await DbContext.InsertAsync(workplaceGrp); } foreach (var factory in tenants.Where(x => x.PCode == workplace.Code)) { var factoryName = $"*{type.GetDescription()}厂区系统组({factory.Name})"; if (!await DbContext.Queryable().Where(x => x.PCode == workplaceGrp.Code).AnyAsync(x => x.Name == factoryName)) { await DbContext.InsertAsync(new DeviceGroupEntity { PCode = workplaceGrp.Code, Code = Guid.NewGuid(), Type = type, Name = factoryName, Editable = false, AbleSetNext = true, Remark = _remark, CreatedBy = 1, CreateTime = DateTime.Now, ModifiedBy = 1, ModifiedTime = DateTime.Now, TenantId = factory.Code, }); } } } } } }