| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- using Admin.NET.Plugin.AiDOP.Dto.S8;
- using Admin.NET.Plugin.AiDOP.Entity.S8;
- namespace Admin.NET.Plugin.AiDOP.Service.S8;
- public class S8DecisionService : ITransient
- {
- private readonly SqlSugarRepository<AdoS8ExceptionTimeline> _timelineRep;
- private readonly SqlSugarRepository<AdoS8DecisionRecord> _decisionRep;
- private readonly SqlSugarRepository<AdoS8Evidence> _evidenceRep;
- private readonly SqlSugarRepository<AdoS8Exception> _exceptionRep;
- public S8DecisionService(
- SqlSugarRepository<AdoS8ExceptionTimeline> timelineRep,
- SqlSugarRepository<AdoS8DecisionRecord> decisionRep,
- SqlSugarRepository<AdoS8Evidence> evidenceRep,
- SqlSugarRepository<AdoS8Exception> exceptionRep)
- {
- _timelineRep = timelineRep;
- _decisionRep = decisionRep;
- _evidenceRep = evidenceRep;
- _exceptionRep = exceptionRep;
- }
- /// <summary>
- /// S8-TENANT-FACTORY-P0-CLOSURE-1:时间线 / 决策 / 证据三张子表无自有 tenant_id / factory_id 列,
- /// 归属只能由父异常派生。调用方必须先用本方法确认父异常在可信作用域内,不在则按「资源不存在」处理,
- /// 不得直接用裸 exceptionId 读取子资源。
- /// </summary>
- public Task<bool> IsExceptionInScopeAsync(long exceptionId, long tenantId, long factoryId) =>
- _exceptionRep.AsQueryable()
- .Where(e => e.Id == exceptionId && e.TenantId == tenantId && e.FactoryId == factoryId && !e.IsDeleted)
- .AnyAsync();
- public async Task<List<AdoS8TimelineItemDto>> GetTimelineAsync(long exceptionId) =>
- await _timelineRep.AsQueryable()
- .Where(x => x.ExceptionId == exceptionId)
- .OrderBy(x => x.CreatedAt)
- .Select(x => new AdoS8TimelineItemDto
- {
- Id = x.Id,
- ActionCode = x.ActionCode,
- ActionLabel = x.ActionLabel,
- FromStatus = x.FromStatus,
- ToStatus = x.ToStatus,
- OperatorId = x.OperatorId,
- OperatorName = x.OperatorName,
- ActionRemark = x.ActionRemark,
- CreatedAt = x.CreatedAt
- })
- .ToListAsync();
- public async Task<List<AdoS8DecisionItemDto>> GetDecisionsAsync(long exceptionId) =>
- await _decisionRep.AsQueryable()
- .Where(x => x.ExceptionId == exceptionId && !x.IsDeleted)
- .OrderBy(x => x.DecisionTime)
- .Select(x => new AdoS8DecisionItemDto
- {
- Id = x.Id,
- DecisionType = x.DecisionType,
- DecisionMakerId = x.DecisionMakerId,
- DecisionMakerName = x.DecisionMakerName,
- DecisionBasis = x.DecisionBasis,
- DecisionResult = x.DecisionResult,
- DecisionRemark = x.DecisionRemark,
- DecisionTime = x.DecisionTime
- })
- .ToListAsync();
- public async Task<List<AdoS8EvidenceItemDto>> GetEvidencesAsync(long exceptionId) =>
- await _evidenceRep.AsQueryable()
- .Where(x => x.ExceptionId == exceptionId && !x.IsDeleted)
- .OrderBy(x => x.UploadedAt)
- .Select(x => new AdoS8EvidenceItemDto
- {
- Id = x.Id,
- EvidenceType = x.EvidenceType,
- FileName = x.FileName,
- FileUrl = x.FileUrl,
- SourceSystem = x.SourceSystem,
- UploadedBy = x.UploadedBy,
- UploadedAt = x.UploadedAt
- })
- .ToListAsync();
- }
|