diff --git a/Src/Dlhis.Basic/Common/ApiLog/Controller/OperateLogsController.cs b/Src/Dlhis.Basic/Common/ApiLog/Controller/OperateLogsController.cs new file mode 100644 index 00000000..8388bf35 --- /dev/null +++ b/Src/Dlhis.Basic/Common/ApiLog/Controller/OperateLogsController.cs @@ -0,0 +1,36 @@ +using Dlhis.Basic.Common.ApiLog.Request; +using Dlhis.Basic.Common.ApiLog.Response; +using Dlhis.Basic.Common.ApiLog.Services; +using Kurisu.AspNetCore.DataAccess.Dto; +using Kurisu.AspNetCore.UnifyResultAndValidation.Aop; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; + +namespace Dlhis.Basic.Common.ApiLog.Controller; + +/// +/// API日志控制器 +/// +[Authorize] +[Route("api/[controller]")] +[ApiController] +public class OperateLogsController : ControllerBase +{ + private readonly IOperateLog _operateLog; + + public OperateLogsController(IOperateLog operateLog) + { + _operateLog = operateLog; + } + + /// + /// 获取操作日志 + /// + /// + [DisableApiLog] + [HttpGet("page")] + public async Task> GetOperateLogPageAsync([FromQuery] OperateLogPageRequest request) + { + return await _operateLog.GetOperateLogPageAsync(request); + } +} \ No newline at end of file diff --git a/Src/Dlhis.Basic/Common/ApiLog/Request/OperateLogPageRequest.cs b/Src/Dlhis.Basic/Common/ApiLog/Request/OperateLogPageRequest.cs new file mode 100644 index 00000000..72ad0a4c --- /dev/null +++ b/Src/Dlhis.Basic/Common/ApiLog/Request/OperateLogPageRequest.cs @@ -0,0 +1,9 @@ +using Kurisu.AspNetCore.DataAccess.Dto; + +namespace Dlhis.Basic.Common.ApiLog.Request +{ + public class OperateLogPageRequest : PageDto + { + + } +} \ No newline at end of file diff --git a/Src/Dlhis.Basic/Common/ApiLog/Response/OperateLogResponse.cs b/Src/Dlhis.Basic/Common/ApiLog/Response/OperateLogResponse.cs new file mode 100644 index 00000000..e1593e98 --- /dev/null +++ b/Src/Dlhis.Basic/Common/ApiLog/Response/OperateLogResponse.cs @@ -0,0 +1,10 @@ +namespace Dlhis.Basic.Common.ApiLog.Response; + +public class OperateLogResponse +{ + public string Content { get; set; } + + public string Operator { get; set; } + + public DateTime CreateTime { get; set; } +} \ No newline at end of file diff --git a/Src/Dlhis.Basic/Common/ApiLog/Services/IOperateLog.cs b/Src/Dlhis.Basic/Common/ApiLog/Services/IOperateLog.cs index 1b572870..36f637a4 100644 --- a/Src/Dlhis.Basic/Common/ApiLog/Services/IOperateLog.cs +++ b/Src/Dlhis.Basic/Common/ApiLog/Services/IOperateLog.cs @@ -1,9 +1,14 @@ +using Dlhis.Basic.Common.ApiLog.Request; +using Dlhis.Basic.Common.ApiLog.Response; using Dlhis.Entity.Common.Enums; +using Kurisu.AspNetCore.DataAccess.Dto; namespace Dlhis.Basic.Common.ApiLog.Services; public interface IOperateLog : IScopeDependency { Task LogAsync(OperateLogType type, string content); + + Task> GetOperateLogPageAsync(OperateLogPageRequest request); } diff --git a/Src/Dlhis.Basic/Common/ApiLog/Services/Implements/OperateLogService.cs b/Src/Dlhis.Basic/Common/ApiLog/Services/Implements/OperateLogService.cs index 3081ccbf..b2a26087 100644 --- a/Src/Dlhis.Basic/Common/ApiLog/Services/Implements/OperateLogService.cs +++ b/Src/Dlhis.Basic/Common/ApiLog/Services/Implements/OperateLogService.cs @@ -1,6 +1,10 @@ +using Dlhis.Basic.Common.ApiLog.Request; +using Dlhis.Basic.Common.ApiLog.Response; using Dlhis.Entity.Common.Entities; using Dlhis.Entity.Common.Enums; using Kurisu.AspNetCore.Authentication.Abstractions; +using Kurisu.AspNetCore.DataAccess.Dto; +using Kurisu.AspNetCore.DataAccess.SqlSugar.Extensions; using Kurisu.AspNetCore.DataAccess.SqlSugar.Services; namespace Dlhis.Basic.Common.ApiLog.Services.Implements; @@ -43,4 +47,17 @@ public class OperateLogService : IOperateLog _logger.LogError(e, "记录操作日志失败:{error}", e.Message); } } + + /// + public async Task> GetOperateLogPageAsync(OperateLogPageRequest request) + { + return await _dbContext.Queryable() + .Select(x => new OperateLogResponse + { + Content = x.Content, + Operator = x.Operator, + CreateTime = x.CreateTime + }) + .ToPageListAsync(request); + } } \ No newline at end of file diff --git a/Src/Dlhis.Basic/Organization/Services/IFactorySettingService.cs b/Src/Dlhis.Basic/Organization/Services/IFactorySettingService.cs index f37f7803..e004fd5e 100644 --- a/Src/Dlhis.Basic/Organization/Services/IFactorySettingService.cs +++ b/Src/Dlhis.Basic/Organization/Services/IFactorySettingService.cs @@ -10,4 +10,10 @@ public interface IFactorySettingService : IScopeDependency Task SaveAsync(FactorySettingSaveRequest request); Task GetFactorySettingAsync(string factory, bool usePermission); + + Task GetWorkGridSetLimitAsync(); + + Task CheckWorkGridSetLimitAsync(DateOnly date); + + Task IsWorkGridSetLimitAsync(DateOnly date); } \ No newline at end of file diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/FactorySettingService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/FactorySettingService.cs index 104d2fdb..485a2c8b 100644 --- a/Src/Dlhis.Basic/Organization/Services/Implements/FactorySettingService.cs +++ b/Src/Dlhis.Basic/Organization/Services/Implements/FactorySettingService.cs @@ -6,9 +6,11 @@ using Dlhis.Entity.Basic.Enums; using Dlhis.Entity.Sys.Entities; using Dlhis.Sys.Api; using Dlhis.Sys.Api.Response; +using Kurisu.AspNetCore.Authentication.Abstractions; using Kurisu.AspNetCore.DataAccess.SqlSugar.Services; using Kurisu.AspNetCore.Utils.Extensions; using Mapster; +using SqlSugar; namespace Dlhis.Basic.Organization.Services.Implements; @@ -16,11 +18,13 @@ public class FactorySettingService : IFactorySettingService { private readonly IDbContext _dbContext; private readonly ITenantApi _tenantApi; + private readonly ICurrentUser _currentUser; - public FactorySettingService(IDbContext dbContext, ITenantApi tenantApi) + public FactorySettingService(IDbContext dbContext, ITenantApi tenantApi, ICurrentUser currentUser) { _dbContext = dbContext; _tenantApi = tenantApi; + _currentUser = currentUser; } public async Task> GetListAsync(bool usePermission) @@ -67,6 +71,37 @@ public class FactorySettingService : IFactorySettingService return setting; } + /// + public async Task GetWorkGridSetLimitAsync() + { + var factory = _currentUser.GetStringTenantId(); + var v = new TimeOnly(20, 30, 0); + + var vv = await _dbContext.Queryable() + .Where(x => x.TenantId == factory) + .Select(x => SqlFunc.IsNull(x.WorkGridSetLimit, v)) + .SingleAsync(); + + return vv!.Value; + } + + /// + public async Task CheckWorkGridSetLimitAsync(DateOnly date) + { + var result = await IsWorkGridSetLimitAsync(date); + result.ThrowIfTrue("当前时间不可编辑"); + } + + /// + public async Task IsWorkGridSetLimitAsync(DateOnly date) + { + var now = DateTime.Now; + var time = await GetWorkGridSetLimitAsync(); + var setting = date.ToDateTime(time); + + return now >= setting; + } + //************************************************************************************************************************************************************ private async Task> GetFactorySettingsAsync(string factory, bool usePermission) diff --git a/Src/Dlhis.Basic/WorkGrids/Request/WorkGridScheduleAttendancePageRequest.cs b/Src/Dlhis.Basic/WorkGrids/Request/WorkGridScheduleAttendancePageRequest.cs index bc783d40..fcf0ae17 100644 --- a/Src/Dlhis.Basic/WorkGrids/Request/WorkGridScheduleAttendancePageRequest.cs +++ b/Src/Dlhis.Basic/WorkGrids/Request/WorkGridScheduleAttendancePageRequest.cs @@ -6,7 +6,6 @@ namespace Dlhis.Basic.WorkGrids.Request; public class WorkGridScheduleAttendancePageRequest : PageDto { - [Required(ErrorMessage = "工号不能为空")] public string UserCode { get; set; } public DateTimePeriod DateTimePeriod { get; set; } diff --git a/Src/Dlhis.Basic/WorkGrids/Request/WorkGridScheduleSaveRequest.cs b/Src/Dlhis.Basic/WorkGrids/Request/WorkGridScheduleSaveRequest.cs index 08b23358..c1ca7415 100644 --- a/Src/Dlhis.Basic/WorkGrids/Request/WorkGridScheduleSaveRequest.cs +++ b/Src/Dlhis.Basic/WorkGrids/Request/WorkGridScheduleSaveRequest.cs @@ -1,8 +1,9 @@ +using System.ComponentModel.DataAnnotations; using Dlhis.Entity.Basic.Enums; namespace Dlhis.Basic.WorkGrids.Request; -public class WorkGridScheduleSaveRequest +public class WorkGridScheduleSaveRequest : IValidatableObject { /// /// 网格code @@ -23,4 +24,14 @@ public class WorkGridScheduleSaveRequest /// 人员codes /// public List UserCodes { get; set; } + + /// + public IEnumerable Validate(ValidationContext validationContext) + { + var now = DateTime.Now; + if (Date.ToDateTime(new TimeOnly(0, 0)) < now.Date) + { + yield return new ValidationResult("不可编辑历史数据"); + } + } } \ No newline at end of file diff --git a/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridScheduleService.cs b/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridScheduleService.cs index ebf66e67..23313c52 100644 --- a/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridScheduleService.cs +++ b/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridScheduleService.cs @@ -1,17 +1,21 @@ using Dlhis.Basic.Common.ApiLog.Services; +using Dlhis.Basic.Organization.Services; using Dlhis.Basic.WorkGrids.Request; using Dlhis.Basic.WorkGrids.Response; +using Dlhis.Constants; using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Basic.Enums; using Dlhis.Entity.Common.Enums; using Dlhis.Entity.Device.Entities; using Dlhis.Jip.Api; using Dlhis.Jip.Api.Requests; +using Kurisu.AspNetCore.Authentication.Abstractions; using Kurisu.AspNetCore.CustomClass; using Kurisu.AspNetCore.DataAccess.Dto; using Kurisu.AspNetCore.DataAccess.SqlSugar.Extensions; using Kurisu.AspNetCore.DataAccess.SqlSugar.Services; using Kurisu.AspNetCore.Utils.Extensions; +using SqlSugar; namespace Dlhis.Basic.WorkGrids.Services.Implements; @@ -20,22 +24,31 @@ public class WorkGridScheduleService : IWorkGridScheduleService private readonly IDbContext _dbContext; private readonly IJinkoJipApi _jinkoJipApi; private readonly IOperateLog _operateLog; + private readonly ICurrentUser _currentUser; + private readonly IFactorySettingService _factorySettingService; - public WorkGridScheduleService(IDbContext dbContext, IJinkoJipApi jinkoJipApi, IOperateLog operateLog) + public WorkGridScheduleService(IDbContext dbContext, + IJinkoJipApi jinkoJipApi, + IOperateLog operateLog, + ICurrentUser currentUser, + IFactorySettingService factorySettingService) { _dbContext = dbContext; _jinkoJipApi = jinkoJipApi; _operateLog = operateLog; + _currentUser = currentUser; + _factorySettingService = factorySettingService; } public async Task SaveAsync(WorkGridScheduleSaveRequest request) { + //await _factorySettingService.CheckWorkGridSetLimitAsync(request.Date); + var workGrid = await _dbContext.Queryable().SingleAsync(x => x.Code == request.WorkGridCode); workGrid.ThrowIfNull("工作网格不存在"); var exists = await _dbContext.Queryable() .Where(x => x.WorkGridCode == request.WorkGridCode - && x.PeriodType == request.PeriodType && x.Date == request.Date && request.UserCodes.Contains(x.UserCode) ) @@ -59,9 +72,11 @@ public class WorkGridScheduleService : IWorkGridScheduleService /// public async Task RemoveAsync(WorkGridScheduleSaveRequest request) { + //await _factorySettingService.CheckWorkGridSetLimitAsync(request.Date); + var workGrid = await _dbContext.Queryable().SingleAsync(x => x.Code == request.WorkGridCode); workGrid.ThrowIfNull("工作网格不存在"); - + var data = await _dbContext.Queryable() .Where(x => x.WorkGridCode == request.WorkGridCode) .Where(x => x.Date == request.Date) @@ -114,11 +129,25 @@ public class WorkGridScheduleService : IWorkGridScheduleService /// public async Task> GetAttendancePageAsync(WorkGridScheduleAttendancePageRequest request) { + var jinkoCode = _currentUser.GetUserClaim(UserClaimConstants.JinkoCode); + var workGrid = await _dbContext.Queryable().Where(x => x.LeaderUserCode == jinkoCode).SingleAsync(); + if (workGrid == null) + { + return new Pagination + { + PageIndex = request.PageIndex, + PageSize = request.PageSize, + Total = 0, + Data = null + }; + } + return await _dbContext.Queryable() .LeftJoin((log, d) => log.DeviceUniqueNo == d.UniqueNo) - .Where(log => log.UserUniqueNo == request.UserCode) .WhereIF(request.DateTimePeriod.HasValue(), log => log.RaiseDateTime >= request.DateTimePeriod.Start && log.RaiseDateTime <= request.DateTimePeriod.End) + .WhereIF(request.UserCode.IsPresent(), log => log.UserUniqueNo == request.UserCode) + .WhereIF(request.UserCode.IsEmpty(), log => SqlFunc.Subqueryable().Where(p => p.WorkGridCode == workGrid.Code && p.UserCode == log.UserUniqueNo).Any()) .OrderBy(log => log.RaiseDateTime) .Select((log, d) => new WorkGridScheduleAttendancePageResponse { diff --git a/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridService.cs b/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridService.cs index 9b6c977a..cebce3af 100644 --- a/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridService.cs +++ b/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridService.cs @@ -20,7 +20,9 @@ public class WorkGridService : IWorkGridService private readonly ICurrentUser _currentUser; private readonly IOperateLog _operateLog; - public WorkGridService(IDbContext dbContext, ICurrentUser currentUser, IOperateLog operateLog) + public WorkGridService(IDbContext dbContext, + ICurrentUser currentUser, + IOperateLog operateLog) { _dbContext = dbContext; _currentUser = currentUser; @@ -33,18 +35,13 @@ public class WorkGridService : IWorkGridService var insertGrids = new List(); var updateGrids = new List(); + var leaderUserCodes = requests.Select(x => x.LeaderUserCode).Distinct().ToList(); + var existsUserCodes = await _dbContext.Queryable().Where(x => leaderUserCodes.Contains(x.Code)).Select(x => x.Code).ToListAsync(); + var notExistsUserCodes = leaderUserCodes.Except(existsUserCodes).ToList(); + notExistsUserCodes.ThrowIfExists($"工号:{notExistsUserCodes.Join(",")}不存在"); + foreach (var request in requests) { - var exists = await _dbContext.Queryable() - .Where(x => x.LeaderUserCode == request.LeaderUserCode) - .WhereIF(request.Id.HasValue, x => x.Id != request.Id) - .AnyAsync(); - - if (!await _dbContext.Queryable().Where(x => x.Code == request.LeaderUserCode).AnyAsync()) - { - true.ThrowIfTrue($"工号:{request.LeaderUserCode}不存在"); - } - if (await _dbContext.Queryable().Where(x => x.Name == request.Name) .WhereIF(request.Id.HasValue, x => x.Id != request.Id) .AnyAsync()) @@ -52,12 +49,18 @@ public class WorkGridService : IWorkGridService true.ThrowIfTrue($"网格区域名称[{request.Name}]重复"); } - exists.ThrowIfTrue($"{request.LeaderUserCode}已存在管理的网格"); if (!request.Id.HasValue) { + var exists = await _dbContext.Queryable() + .Where(x => x.LeaderUserCode == request.LeaderUserCode) + .WhereIF(request.Id.HasValue, x => x.Id != request.Id) + .AnyAsync(); + exists.ThrowIfTrue($"{request.LeaderUserCode}人员存在管理中的网格,无法添加"); + var entity = request.Adapt(); entity.Code = Guid.NewGuid(); + entity.LeaderUserCode = request.LeaderUserCode; await _dbContext.InsertAsync(entity); insertGrids.Add($"{entity.Name}({entity.LeaderUserCode})"); @@ -82,6 +85,7 @@ public class WorkGridService : IWorkGridService public async Task> GetPageAsync(WorkGridPageRequest request) { var role = _currentUser.GetRole(); + var factory = _currentUser.GetStringTenantId(); var userCode = _currentUser.GetUserClaim(UserClaimConstants.JinkoCode); var isAll = role is "admin" or "tenant-admin"; @@ -89,6 +93,7 @@ public class WorkGridService : IWorkGridService .LeftJoin((x, ga) => x.LeaderUserCode == ga.Code) .WhereIF(!isAll, x => x.LeaderUserCode == userCode) .WhereIF(request.Search.IsPresent(), x => x.Name.Contains(request.Search) || x.LeaderUserCode == request.Search) + .Where(x => SqlFunc.Subqueryable().Where(p => p.Code == x.LeaderUserCode && p.Factory == factory).Any()) .Select((x, ga) => new WorkGridPageResponse { Id = x.Id, @@ -108,9 +113,14 @@ public class WorkGridService : IWorkGridService var workGrid = await _dbContext.Queryable().Where(x => x.LeaderUserCode == from).SingleAsync(); workGrid.ThrowIfNull("网格不存在"); + var beforeGainfo = await _dbContext.Queryable().Where(x => x.Code == from).SingleAsync(); + beforeGainfo.ThrowIfNull($"{from}人员不存在"); + var gainfo = await _dbContext.Queryable().Where(x => x.Code == to).SingleAsync(); gainfo.ThrowIfNull($"{to}人员不存在"); + (gainfo.Factory != beforeGainfo.Factory).ThrowIfTrue($"必须选择相同厂区({beforeGainfo.Factory})人员管理({gainfo.Factory}错误)"); + workGrid.LeaderUserCode = to; await _dbContext.UpdateAsync(workGrid); @@ -120,7 +130,7 @@ public class WorkGridService : IWorkGridService /// public async Task GetMyWorkGridAsync(WorkGridPageRequest request) { - var currentUserCode = _currentUser.GetUserClaim("jinko-code"); + var currentUserCode = _currentUser.GetUserClaim(UserClaimConstants.JinkoCode); var myWorkGrid = await _dbContext.Queryable() .WhereIF(request.WorkGridCode.HasValue == false, x => x.LeaderUserCode == currentUserCode) .WhereIF(request.WorkGridCode.HasValue, x => x.Code == request.WorkGridCode) @@ -162,10 +172,10 @@ public class WorkGridService : IWorkGridService (count != request.UserCodes.Count).ThrowIfTrue("存在非当前厂区人员,请检查"); - var existsAssigned = await _dbContext.Queryable().Where(x => x.WorkGridCode == myWorkGrid.Code) + var existsAssigned = await _dbContext.Queryable() .Where(x => request.UserCodes.Contains(x.UserCode)) .AnyAsync(); - existsAssigned.ThrowIfTrue("存在已经分配人员,请勿重复分配"); + existsAssigned.ThrowIfTrue("存在已经分配人员,操作失败!"); var dataToInserts = request.UserCodes.Select(x => new WorkGridUserEntity { @@ -180,15 +190,19 @@ public class WorkGridService : IWorkGridService /// public async Task RemoveAsync(WorkGridUserRemoveRequest request) { - var currentUserCode = _currentUser.GetUserClaim("jinko-code"); + var currentUserCode = _currentUser.GetUserClaim(UserClaimConstants.JinkoCode); var myWorkGrid = await _dbContext.Queryable().Where(x => x.LeaderUserCode == currentUserCode).SingleAsync(); myWorkGrid.ThrowIfNull("工作网格尚未配置,请联系管理员"); - var workGridUsers = await _dbContext.Queryable().Where(x => x.WorkGridCode == myWorkGrid.Code) + var workGridUsers = await _dbContext.Queryable() + .Where(x => x.WorkGridCode == myWorkGrid.Code) .Where(x => request.UserCodes.Contains(x.UserCode)) .ToListAsync(); - var workGridSchedules = await _dbContext.Queryable().Where(x => x.WorkGridCode == myWorkGrid.Code) + var date = DateOnly.FromDateTime(DateTime.Today); + var workGridSchedules = await _dbContext.Queryable() + .Where(x => x.Date > date) + .Where(x => x.WorkGridCode == myWorkGrid.Code) .Where(x => request.UserCodes.Contains(x.UserCode)) .ToListAsync(); diff --git a/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridTimePeriodService.cs b/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridTimePeriodService.cs index e59c4ac0..06922bef 100644 --- a/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridTimePeriodService.cs +++ b/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridTimePeriodService.cs @@ -2,7 +2,6 @@ using Dlhis.Basic.Common.ApiLog.Services; using Dlhis.Basic.WorkGrids.Request; using Dlhis.Basic.WorkGrids.Response; using Dlhis.Entity.Basic.Entity; -using Dlhis.Entity.Basic.Enums; using Dlhis.Entity.Common.Enums; using Kurisu.AspNetCore.DataAccess.Dto; using Kurisu.AspNetCore.DataAccess.SqlSugar.Extensions; @@ -27,7 +26,6 @@ public class WorkGridTimePeriodService : IWorkGridTimePeriodService public async Task SaveAsync(WorkGridTimePeriodSaveRequest request) { //await CheckDuplicateTimePeriodAsync(request); - if (!request.Id.HasValue) { //判断重复配置 @@ -65,17 +63,6 @@ public class WorkGridTimePeriodService : IWorkGridTimePeriodService //************************************************************************************************************************************************* - /// - /// 根据类型获取配置 - /// - /// - /// - private async Task GetSettingAsync(WorkGridTimePeriodEnumType timePeriodType) - { - return await _dbContext.Queryable() - .Where(x => x.Type == timePeriodType) - .SingleAsync(); - } // /// // /// 检查时间段重合检查 diff --git a/Src/Dlhis.Entity/Basic/Entity/WorkGridScheduleEntity.cs b/Src/Dlhis.Entity/Basic/Entity/WorkGridScheduleEntity.cs index 21ff88d1..53d0b25a 100644 --- a/Src/Dlhis.Entity/Basic/Entity/WorkGridScheduleEntity.cs +++ b/Src/Dlhis.Entity/Basic/Entity/WorkGridScheduleEntity.cs @@ -1,5 +1,4 @@ using Dlhis.Entity.Basic.Enums; -using Kurisu.AspNetCore.DataAccess.Entity; using Kurisu.AspNetCore.DataAccess.SqlSugar; using SqlSugar; using SqlSugar.DbConvert; @@ -9,19 +8,19 @@ namespace Dlhis.Entity.Basic.Entity; /// /// /// -[SugarTable(TableName = "WorkGridSchedule")] -public class WorkGridScheduleEntity : SugarBaseEntity, ITenantId +[SugarTable(TableName = "WorkGridSchedules")] +public class WorkGridScheduleEntity : SugarBaseEntity { /// /// 网格code /// - [SugarColumn(IsNullable = false, ColumnDescription = "网格code")] + [SugarColumn(IsNullable = false, ColumnDescription = "网格code", IndexGroupNameList = new[] { "idx_WorkGridSchedules_workGridCode_date" })] public Guid WorkGridCode { get; set; } /// /// 排班日期 /// - [SugarColumn(IsNullable = false, ColumnDataType = "date", ColumnDescription = "排班日期")] + [SugarColumn(IsNullable = false, ColumnDataType = "date", ColumnDescription = "排班日期", IndexGroupNameList = new[] { "idx_WorkGridSchedules_workGridCode_date" })] public DateOnly Date { get; set; } /// @@ -33,10 +32,6 @@ public class WorkGridScheduleEntity : SugarBaseEntity, ITenantId /// /// 工号 /// - [SugarColumn(IsNullable = false, ColumnDescription = "工号")] + [SugarColumn(IsNullable = false, ColumnDescription = "工号", IndexGroupNameList = new[] { "idx_WorkGridSchedules_userCode" })] public string UserCode { get; set; } - - - /// - public string TenantId { get; set; } } \ No newline at end of file diff --git a/Src/Dlhis.Entity/Basic/Entity/WorkGridUserEntity.cs b/Src/Dlhis.Entity/Basic/Entity/WorkGridUserEntity.cs index 05ccd503..dd998292 100644 --- a/Src/Dlhis.Entity/Basic/Entity/WorkGridUserEntity.cs +++ b/Src/Dlhis.Entity/Basic/Entity/WorkGridUserEntity.cs @@ -1,8 +1,5 @@ -using Dlhis.Entity.Basic.Enums; -using Kurisu.AspNetCore.DataAccess.Entity; using Kurisu.AspNetCore.DataAccess.SqlSugar; using SqlSugar; -using SqlSugar.DbConvert; namespace Dlhis.Entity.Basic.Entity; @@ -10,7 +7,7 @@ namespace Dlhis.Entity.Basic.Entity; /// 网格人员 /// [SugarTable(TableName = "WorkGridUsers")] -public class WorkGridUserEntity : SugarBaseEntity, ITenantId +public class WorkGridUserEntity : SugarBaseEntity { /// /// 网格code @@ -21,15 +18,6 @@ public class WorkGridUserEntity : SugarBaseEntity, ITenantId /// /// 网格人员 /// - [SugarColumn(IsNullable = false, ColumnDescription = "网格人员")] + [SugarColumn(IsNullable = false, ColumnDescription = "网格人员", UniqueGroupNameList = new[] { "idx_WorkGridUsers_userCode" })] public string UserCode { get; set; } - - /// - /// 排班类型 - /// - [SugarColumn(IsNullable = true,ColumnDataType = "varchar(50)",ColumnDescription = "排班类型", SqlParameterDbType = typeof(EnumToStringConvert))] - public WorkGridTimePeriodEnumType? ScheduleType { get; set; } - - /// - public string TenantId { get; set; } } \ No newline at end of file diff --git a/Src/Dlhis.Entity/Sys/Entities/FactorySettingEntity.cs b/Src/Dlhis.Entity/Sys/Entities/FactorySettingEntity.cs index 89b9f935..2a764e84 100644 --- a/Src/Dlhis.Entity/Sys/Entities/FactorySettingEntity.cs +++ b/Src/Dlhis.Entity/Sys/Entities/FactorySettingEntity.cs @@ -34,12 +34,15 @@ public class FactorySettingEntity : SugarBaseEntity, ITenantId /// [SugarColumn(ColumnDescription = "人脸检测配置", IsNullable = true, IsJson = true)] public FaceImageDetectionDto FaceImageDetection { get; set; } - - + + /// /// 外包自动离职天数(无通行记录) /// public int NoRecordAutoResignOutsourceDays { get; set; } + [SugarColumn(IsNullable = true, ColumnDataType = "time", ColumnDescription = "工作网格编辑限制时间")] + public TimeOnly? WorkGridSetLimit { get; set; } + public string TenantId { get; set; } } \ No newline at end of file