feat 例外人员权限增加到期时间,厂区配置增加生日券,外包自动离场报名单
This commit is contained in:
@@ -55,4 +55,20 @@ public class FactorySettingController : ControllerBase
|
||||
{
|
||||
return await _factorySettingService.GetFactorySettingAsync(factory, false);
|
||||
}
|
||||
|
||||
[IgnoreTenant]
|
||||
[AllowAnonymous]
|
||||
[HttpGet("enableBirthdayVoucherFactories")]
|
||||
public async Task<List<string>> GetEnableBirthdayVoucherFactoriesAsync()
|
||||
{
|
||||
return await _factorySettingService.GetEnableBirthdayVoucherFactoriesAsync();
|
||||
}
|
||||
|
||||
[IgnoreTenant]
|
||||
[AllowAnonymous]
|
||||
[HttpGet("enableUseBirthdayVoucherFactories")]
|
||||
public async Task<List<string>> GetEnableBirthdayVoucherFactoriesAsync(string factory)
|
||||
{
|
||||
return await _factorySettingService.GetEnableUseBirthdayVoucherFactoriesAsync(factory);
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,10 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using Dlhis.Basic.Organization.Dto;
|
||||
using Dlhis.Basic.Organization.Request;
|
||||
using Dlhis.Basic.Organization.Response;
|
||||
using Dlhis.Basic.Organization.Services;
|
||||
using Dlhis.Basic.Organization.Services.Implements;
|
||||
using Kurisu.AspNetCore.DataAccess.Dto;
|
||||
using Kurisu.AspNetCore.DataAccess.SqlSugar.Aop;
|
||||
using Kurisu.AspNetCore.Utils.Extensions;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
@@ -18,10 +21,12 @@ namespace Dlhis.Basic.Organization.Controllers;
|
||||
public class GainfoOutsourceController : ControllerBase
|
||||
{
|
||||
private readonly IGainfoOutsourceService _gainfoOutSourceService;
|
||||
private readonly IOutsourceWhiteListService _outsourceWhiteList;
|
||||
|
||||
public GainfoOutsourceController(IGainfoOutsourceService gainfoOutSourceService)
|
||||
public GainfoOutsourceController(IGainfoOutsourceService gainfoOutSourceService, IOutsourceWhiteListService outsourceWhiteList)
|
||||
{
|
||||
_gainfoOutSourceService = gainfoOutSourceService;
|
||||
_outsourceWhiteList = outsourceWhiteList;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -66,7 +71,6 @@ public class GainfoOutsourceController : ControllerBase
|
||||
/// </summary>
|
||||
/// <param name="userNo"></param>
|
||||
/// <returns></returns>
|
||||
[AllowAnonymous]
|
||||
[HttpGet("info")]
|
||||
public async Task<GainfoOutSourceExternalInfoResponse> GetExternalInfoAsync([Required] string userNo)
|
||||
{
|
||||
@@ -83,4 +87,37 @@ public class GainfoOutsourceController : ControllerBase
|
||||
{
|
||||
await _gainfoOutSourceService.AutoResignAsync();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取外包白名单分页数据
|
||||
/// </summary>
|
||||
/// <param name="request"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost("whiteListPage")]
|
||||
public async Task<Pagination<GainfoDto>> GetPageAsync(OutsourceWhiteListPageRequest request)
|
||||
{
|
||||
return await _outsourceWhiteList.GetPageAsync(request);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 添加外包白名单
|
||||
/// </summary>
|
||||
/// <param name="request"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost("setWhiteList")]
|
||||
public async Task AddAsync(OutsourceWhiteListAddAndRemoveRequest request)
|
||||
{
|
||||
await _outsourceWhiteList.AddAsync(request.UserCode);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 移除外包白名单
|
||||
/// </summary>
|
||||
/// <param name="request"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost("removeWhiteList")]
|
||||
public async Task RemoveAsync(OutsourceWhiteListAddAndRemoveRequest request)
|
||||
{
|
||||
await _outsourceWhiteList.RemoveAsync(request.UserCode);
|
||||
}
|
||||
}
|
||||
@@ -32,4 +32,11 @@ public class FactorySettingSaveRequest
|
||||
/// 访客自动离职天数(无通行记录)
|
||||
/// </summary>
|
||||
public int NoRecordAutoResignExternalDays { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否启用生日电子餐券
|
||||
/// </summary>
|
||||
public bool EnableBirthdayVoucher { get; set; }
|
||||
|
||||
public List<string> EnableUseBirthdayVoucherFactories { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace Dlhis.Basic.Organization.Request;
|
||||
|
||||
public class OutsourceWhiteListAddAndRemoveRequest
|
||||
{
|
||||
/// <summary>
|
||||
/// 工号
|
||||
/// </summary>
|
||||
[Required]
|
||||
public string UserCode { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
using Kurisu.AspNetCore.DataAccess.Dto;
|
||||
|
||||
namespace Dlhis.Basic.Organization.Request;
|
||||
|
||||
public class OutsourceWhiteListPageRequest : PageDto
|
||||
{
|
||||
}
|
||||
@@ -32,4 +32,11 @@ public class FactorySettingResponse
|
||||
/// 外部人员自动离职天数(无通行记录)
|
||||
/// </summary>
|
||||
public int NoRecordAutoResignExternalDays { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否启用生日电子餐券
|
||||
/// </summary>
|
||||
public bool EnableBirthdayVoucher { get; set; }
|
||||
|
||||
public List<string> EnableUseBirthdayVoucherFactories { get; set; }
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
using Dlhis.Entity.Basic.Enums;
|
||||
using Dlhis.Basic.Utils;
|
||||
using Dlhis.Entity.Basic.Enums;
|
||||
using Kurisu.AspNetCore.Utils.Converters;
|
||||
using Kurisu.AspNetCore.Utils.Extensions;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
@@ -6,6 +6,8 @@ namespace Dlhis.Basic.Organization.Response;
|
||||
|
||||
public class GainfoOutSourceExternalInfoResponse : GainfoOutSourceExternalInfoDto
|
||||
{
|
||||
public string UserCode { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 对接人姓名
|
||||
/// </summary>
|
||||
@@ -27,4 +29,6 @@ public class GainfoOutSourceExternalInfoResponse : GainfoOutSourceExternalInfoDt
|
||||
/// 厂区
|
||||
/// </summary>
|
||||
public string Factory { get; set; }
|
||||
|
||||
public bool IsWhiteListInAutoResign { get; set; }
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
using Dlhis.Entity.Basic.Enums;
|
||||
using Dlhis.Basic.Utils;
|
||||
using Dlhis.Entity.Basic.Enums;
|
||||
using Kurisu.AspNetCore.Utils.Converters;
|
||||
using Kurisu.AspNetCore.Utils.Extensions;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
@@ -14,6 +14,12 @@ public interface IFactorySettingService : IScopeDependency
|
||||
Task<TimeOnly> GetWorkGridSetLimitAsync();
|
||||
|
||||
Task CheckWorkGridSetLimitAsync(DateOnly date);
|
||||
|
||||
|
||||
Task<bool> IsWorkGridSetLimitAsync(DateOnly date);
|
||||
|
||||
Task<bool> IsEnableBirthdayVoucherAsync(string factory, bool usePermission);
|
||||
|
||||
Task<List<string>> GetEnableBirthdayVoucherFactoriesAsync();
|
||||
|
||||
Task<List<string>> GetEnableUseBirthdayVoucherFactoriesAsync(string currentFactory);
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
using Dlhis.Basic.Organization.Dto;
|
||||
using Dlhis.Basic.Organization.Request;
|
||||
using Kurisu.AspNetCore.DataAccess.Dto;
|
||||
|
||||
namespace Dlhis.Basic.Organization.Services;
|
||||
|
||||
public interface IOutsourceWhiteListService : IScopeDependency
|
||||
{
|
||||
Task<Pagination<GainfoDto>> GetPageAsync(OutsourceWhiteListPageRequest request);
|
||||
Task AddAsync(string userCode);
|
||||
Task RemoveAsync(string userCode);
|
||||
}
|
||||
@@ -38,6 +38,7 @@ public class FactorySettingService : IFactorySettingService
|
||||
if (setting == null)
|
||||
{
|
||||
setting = request.Adapt<FactorySettingEntity>();
|
||||
setting.EnableUseBirthdayVoucherFactories = request.EnableUseBirthdayVoucherFactories.ToJson();
|
||||
setting.TenantId = request.Factory;
|
||||
|
||||
await _dbContext.InsertAsync(setting);
|
||||
@@ -45,12 +46,19 @@ public class FactorySettingService : IFactorySettingService
|
||||
else
|
||||
{
|
||||
request.Adapt(setting);
|
||||
setting.EnableUseBirthdayVoucherFactories = request.EnableUseBirthdayVoucherFactories.ToJson();
|
||||
setting.TenantId = request.Factory;
|
||||
|
||||
await _dbContext.UpdateAsync(setting);
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<bool> IsEnableBirthdayVoucherAsync(string factory, bool usePermission)
|
||||
{
|
||||
var setting = await GetFactorySettingAsync(factory, usePermission);
|
||||
return setting.EnableBirthdayVoucher;
|
||||
}
|
||||
|
||||
|
||||
public async Task<FactorySettingResponse> GetFactorySettingAsync(string factory, bool usePermission)
|
||||
{
|
||||
@@ -102,6 +110,20 @@ public class FactorySettingService : IFactorySettingService
|
||||
return now >= setting;
|
||||
}
|
||||
|
||||
|
||||
public async Task<List<string>> GetEnableBirthdayVoucherFactoriesAsync()
|
||||
{
|
||||
var settings = await GetListAsync(false);
|
||||
return settings.Where(x => x.EnableBirthdayVoucher).Select(x => x.Factory).ToList();
|
||||
}
|
||||
|
||||
public async Task<List<string>> GetEnableUseBirthdayVoucherFactoriesAsync(string currentFactory)
|
||||
{
|
||||
var settings = await GetFactorySettingsAsync(currentFactory, false);
|
||||
var setting = settings.Where(x => x.EnableBirthdayVoucher).FirstOrDefault();
|
||||
return setting.EnableUseBirthdayVoucherFactories;
|
||||
}
|
||||
|
||||
//************************************************************************************************************************************************************
|
||||
|
||||
private async Task<List<FactorySettingResponse>> GetFactorySettingsAsync(string factory, bool usePermission)
|
||||
@@ -150,8 +172,11 @@ public class FactorySettingService : IFactorySettingService
|
||||
}).ToList()
|
||||
},
|
||||
NoRecordAutoResignOutsourceDays = currentSetting?.NoRecordAutoResignOutsourceDays ?? 30,
|
||||
NoRecordAutoResignExternalDays = currentSetting?.NoRecordAutoResignExternalDays ?? 0
|
||||
NoRecordAutoResignExternalDays = currentSetting?.NoRecordAutoResignExternalDays ?? 0,
|
||||
EnableBirthdayVoucher = currentSetting?.EnableBirthdayVoucher ?? false,
|
||||
EnableUseBirthdayVoucherFactories = (currentSetting?.EnableUseBirthdayVoucherFactories ?? "[]").ToObject<List<string>>()
|
||||
};
|
||||
}).ToList();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -3,6 +3,7 @@ using Dlhis.Basic.Organization.Api;
|
||||
using Dlhis.Basic.Organization.Api.Request;
|
||||
using Dlhis.Basic.Organization.Request;
|
||||
using Dlhis.Basic.Organization.Response;
|
||||
using Dlhis.Basic.ThirdParts;
|
||||
using Dlhis.Entity.Basic.Entity;
|
||||
using Dlhis.Entity.Basic.Enums;
|
||||
using Dlhis.Entity.Device.Enums;
|
||||
|
||||
@@ -3,6 +3,7 @@ using Dlhis.Basic.Device.Response;
|
||||
using Dlhis.Basic.Device.Services;
|
||||
using Dlhis.Basic.Organization.Request;
|
||||
using Dlhis.Basic.Organization.Response;
|
||||
using Dlhis.Basic.Utils;
|
||||
using Dlhis.Entity.Basic.Entity;
|
||||
using Dlhis.Entity.Device.Entities;
|
||||
using Dlhis.Entity.Device.Enums;
|
||||
|
||||
@@ -4,6 +4,7 @@ using Dlhis.Entity.Basic.Entity;
|
||||
using Dlhis.Entity.Basic.Enums;
|
||||
using Dlhis.Entity.Device.Entities;
|
||||
using Kurisu.AspNetCore.Cache;
|
||||
using Kurisu.AspNetCore.CustomClass;
|
||||
using Kurisu.AspNetCore.DataAccess.SqlSugar.Services;
|
||||
using Kurisu.AspNetCore.Utils.Extensions;
|
||||
using Mapster;
|
||||
@@ -94,21 +95,28 @@ public class GainfoOutsourceService : IGainfoOutsourceService
|
||||
|
||||
public async Task<GainfoOutSourceExternalInfoResponse> GetExternalInfoAsync(string userNo)
|
||||
{
|
||||
return await _dbContext.Queryable<OutsourceEntity>()
|
||||
.LeftJoin<GainfoEntity>((a, b) => a.Code == b.Code)
|
||||
.LeftJoin<GainfoEntity>((a, b, c) => a.SapCode == c.Code)
|
||||
.Where((a, b, c) => b.No == userNo)
|
||||
.Select((a, b, c) => new GainfoOutSourceExternalInfoResponse
|
||||
{
|
||||
Supplier = a.Supplier,
|
||||
SapCode = a.SapCode,
|
||||
SapPhone = a.SapPhone,
|
||||
SapName = c.Name,
|
||||
EntryDate = b.EntryDate,
|
||||
ResignationDate = b.ResignationDate,
|
||||
Factory = b.Factory
|
||||
})
|
||||
.SingleAsync();
|
||||
var data = await _dbContext.Queryable<OutsourceEntity>()
|
||||
.LeftJoin<GainfoEntity>((a, b) => a.Code == b.Code)
|
||||
.LeftJoin<GainfoEntity>((a, b, c) => a.SapCode == c.Code)
|
||||
.Where((a, b, c) => b.No == userNo)
|
||||
.Select((a, b, c) => new GainfoOutSourceExternalInfoResponse
|
||||
{
|
||||
UserCode = b.Code,
|
||||
Supplier = a.Supplier,
|
||||
SapCode = a.SapCode,
|
||||
SapPhone = a.SapPhone,
|
||||
SapName = c.Name,
|
||||
EntryDate = b.EntryDate,
|
||||
ResignationDate = b.ResignationDate,
|
||||
Factory = b.Factory
|
||||
})
|
||||
.SingleAsync();
|
||||
|
||||
data.IsWhiteListInAutoResign = await _dbContext.Queryable<OutsourceWhiteListEntity>()
|
||||
.Where(x => x.UserCode == data.UserCode)
|
||||
.AnyAsync();
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
@@ -116,11 +124,27 @@ public class GainfoOutsourceService : IGainfoOutsourceService
|
||||
{
|
||||
var outsources = await _dbContext.Queryable<GainfoEntity>()
|
||||
.Where(x => x.Type == GainfoUserTypeEnumType.Outsource)
|
||||
.Where(x => SqlFunc.Subqueryable<OutsourceWhiteListEntity>().Where(p => p.UserCode == x.Code).NotAny())//不存在白名单中
|
||||
.Select(x => new { x.Id, x.Code, x.Factory, x.CreateTime })
|
||||
.ToListAsync();
|
||||
|
||||
var settings = await _factorySettingService.GetListAsync(false);
|
||||
|
||||
var holidaies = await _dbContext
|
||||
.Queryable<HolidayEntity>()
|
||||
.Select(x => new
|
||||
{
|
||||
x.Type,
|
||||
Period = new DatePeriod
|
||||
{
|
||||
Start = x.Start,
|
||||
End = x.End
|
||||
}
|
||||
})
|
||||
.ToListAsync();
|
||||
|
||||
|
||||
var weekends = new List<DayOfWeek>() { DayOfWeek.Saturday, DayOfWeek.Sunday };
|
||||
foreach (var grp in outsources.GroupBy(x => x.Factory))
|
||||
{
|
||||
var setting = settings.First(x => x.Factory == grp.Key);
|
||||
@@ -138,26 +162,67 @@ public class GainfoOutsourceService : IGainfoOutsourceService
|
||||
.Select(x => SqlFunc.IsNull(SqlFunc.AggregateMax(x.RaiseDateTime), default(DateTime?)))
|
||||
.SingleAsync();
|
||||
|
||||
if (raiseDateTime.HasValue && raiseDateTime.Value.AddDays(setting.NoRecordAutoResignOutsourceDays) < DateTime.Now)
|
||||
if (raiseDateTime.HasValue)
|
||||
{
|
||||
try
|
||||
var checkDates = GetDaysUntilToday(raiseDateTime.Value);
|
||||
var days = checkDates.Count;
|
||||
foreach (var date in checkDates)
|
||||
{
|
||||
await _gainfoService.ResignAsync(new GainfoResignRequest
|
||||
//date.DayOfWeek
|
||||
foreach (var holiday in holidaies)
|
||||
{
|
||||
Id = outsource.Id,
|
||||
Reason = $"{setting.NoRecordAutoResignOutsourceDays}天无通行记录",
|
||||
Date = DateTime.Now
|
||||
});
|
||||
var isPresent = date >= holiday.Period.Start && date <= holiday.Period.Start;
|
||||
if (isPresent)
|
||||
{
|
||||
if (holiday.Type == HolidayEnumType.Rest)
|
||||
{
|
||||
days--;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (weekends.Contains(date.DayOfWeek))
|
||||
{
|
||||
days--;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
if (days >= setting.NoRecordAutoResignOutsourceDays)
|
||||
{
|
||||
_logger.LogError(e, "自动离职外包异常:{msg}", e.Message);
|
||||
try
|
||||
{
|
||||
await _gainfoService.ResignAsync(new GainfoResignRequest
|
||||
{
|
||||
Id = outsource.Id,
|
||||
Reason = $"{setting.NoRecordAutoResignOutsourceDays}天无通行记录",
|
||||
Date = DateTime.Now
|
||||
});
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_logger.LogError(e, "自动离职外包异常:{msg}", e.Message);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public List<DateOnly> GetDaysUntilToday(DateTime begin)
|
||||
{
|
||||
var start = DateOnly.FromDateTime(begin.Date);
|
||||
var today = DateOnly.FromDateTime(DateTime.Today);
|
||||
if (start > today) return new List<DateOnly>();
|
||||
|
||||
var days = new List<DateOnly>();
|
||||
for (var d = start; d <= today; d = d.AddDays(1))
|
||||
{
|
||||
days.Add(d);
|
||||
}
|
||||
|
||||
return days;
|
||||
}
|
||||
|
||||
//********************************************************************** help methods ***********************************************************************************
|
||||
|
||||
|
||||
@@ -345,7 +345,7 @@ public class GainfoUpdateService : IGainfoUpdateService
|
||||
|
||||
var content = $"{workGrid.Name}的网格长,你好,检测到你网格中 {gainfo.Name}({gainfo.Code}),因发生离职或者异动,现已经删除该员工{dates}的排班信息,请前往系统处理!";
|
||||
|
||||
await _dingTalkApi.SendWorkMessageAsync(new DingTalkWorkMessageRequest
|
||||
await _dingTalkApi.SendWorkMessageByWorkGridAsync(new DingTalkWorkMessageRequest
|
||||
{
|
||||
Content = content,
|
||||
WorkCodes = new List<string> { workGrid.LeaderUserCode }
|
||||
@@ -409,7 +409,7 @@ public class GainfoUpdateService : IGainfoUpdateService
|
||||
}).SingleAsync();
|
||||
var content = $"{workGrid.Name}的网格长,你好,检测到你网格中 {gainfo.Name}({gainfo.Code}),因发生离职或者异动,现已经删除该员工{dates}的排班信息,请前往系统处理!";
|
||||
|
||||
await _dingTalkApi.SendWorkMessageAsync(new DingTalkWorkMessageRequest
|
||||
await _dingTalkApi.SendWorkMessageByWorkGridAsync(new DingTalkWorkMessageRequest
|
||||
{
|
||||
Content = content,
|
||||
WorkCodes = new List<string> { workGrid.LeaderUserCode }
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
|
||||
using Dlhis.Basic.Organization.Dto;
|
||||
using Dlhis.Basic.Organization.Request;
|
||||
using Dlhis.Entity.Basic.Entity;
|
||||
using Dlhis.Entity.Basic.Enums;
|
||||
using Kurisu.AspNetCore.DataAccess.Dto;
|
||||
using Kurisu.AspNetCore.DataAccess.SqlSugar.Extensions;
|
||||
using Kurisu.AspNetCore.DataAccess.SqlSugar.Services;
|
||||
using Kurisu.AspNetCore.Utils.Extensions;
|
||||
|
||||
namespace Dlhis.Basic.Organization.Services.Implements;
|
||||
|
||||
public class OutsourceWhiteListService : IOutsourceWhiteListService
|
||||
{
|
||||
private readonly IDbContext _dbContext;
|
||||
|
||||
public OutsourceWhiteListService(IDbContext dbContext)
|
||||
{
|
||||
_dbContext = dbContext;
|
||||
}
|
||||
|
||||
public async Task AddAsync(string userCode)
|
||||
{
|
||||
var gainfo = await _dbContext.Queryable<GainfoEntity>().Where(x => x.Code == userCode).SingleAsync();
|
||||
gainfo.ThrowIfNull("人员信息不存在");
|
||||
(gainfo.Type == GainfoUserTypeEnumType.Outsource).ThrowIfFalse("人员类型不正确");
|
||||
if (!await _dbContext.Queryable<OutsourceWhiteListEntity>().Where(x => x.UserCode == userCode).AnyAsync())
|
||||
{
|
||||
await _dbContext.InsertAsync(new OutsourceWhiteListEntity
|
||||
{
|
||||
UserCode = userCode
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public async Task RemoveAsync(string userCode)
|
||||
{
|
||||
var whitelist = await _dbContext.Queryable<OutsourceWhiteListEntity>().Where(x => x.UserCode == userCode).SingleAsync();
|
||||
if (whitelist != null)
|
||||
{
|
||||
await _dbContext.DeleteAsync(whitelist);
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<Pagination<GainfoDto>> GetPageAsync(OutsourceWhiteListPageRequest request)
|
||||
{
|
||||
return await _dbContext.Queryable<OutsourceWhiteListEntity>()
|
||||
.LeftJoin<GainfoEntity>((x, ga) => x.UserCode == ga.Code)
|
||||
.Select((x, ga) => new GainfoDto
|
||||
{
|
||||
Code = ga.Code,
|
||||
Name = ga.Name,
|
||||
})
|
||||
.ToPageListAsync(request);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user