using System.Linq.Expressions; using SJZY.Expand.ABP.Core.PublicMethords; using SJZY.Track.Domain.Aggregates.TrackContentAggregate; using SJZY.Track.Domain.Aggregates.TrackFlagAggregate; using SJZY.Track.Domain.Aggregates.TrackNodeAggregate; using SJZY.Track.Domain.Aggregates.TrackStatusAggregate; using SJZY.Track.Domain.Aggregates.TrackTemplateAggregate; using SJZY.Track.Domain.Dtos.TrackTemplate; using SJZY.Track.Domain.Enums; using SJZY.Track.Domain.VEntities; using SJZY.Expand.ABP.Core.SqlSugar.Tools; namespace SJZY.Track.Repository.Repositories; public class TrackTemplateRepository : BasicRepository, ITrackTemplateRepository, IScopedDependency { /// /// 获取轨迹模版明细 /// /// /// public async Task GetDetailAsync(int id) { var detail = await Context.Queryable() .LeftJoin((a, b) => a.SubSystemId == b.Id && b.IsDeleted == false) .Where((a, b) => a.Id == id) .Select((a, b) => new GetTrackTemplateDetailVO { Id = a.Id, Code = a.Code, Name = a.Name, SubSystemId = a.SubSystemId, SubSystem = b.CnName, CustomerId = a.CustomerId, CategoryId = a.CategoryId, }).FirstAsync(); return detail; } /// /// 分页获取轨迹模版 /// /// /// public async Task> GetPageTrackTemplate(GetPageTrackTemplateVO input) { var pagedList = await Context.Queryable() .LeftJoin((a, b) => a.SubSystemId == b.Id && b.IsDeleted == false) .WhereIF(input.SubSystemId > 0, (a, b) => a.SubSystemId == input.SubSystemId) .WhereIF(!input.Keywords.IsNullOrWhiteSpace(), (a, b) => a.Name.Contains(input.Keywords!) || a.Code.Contains(input.Keywords!)) .OrderByIF(input.SelectIds.IsNullOrEmpty(), (a, b) => a.CreateTime, OrderByType.Desc) .OrderByIF(!input.SelectIds.IsNullOrEmpty(), (a, b) => SqlFunc.IIF(input.SelectIds!.Contains(a.Id), SqlFunc.DateAdd(SqlFunc.GetDate(), 1), a.CreateTime), OrderByType.Desc) .Select((a, b) => new GetTrackTemplateListVO { Id = a.Id, Code = a.Code, CreateTime = a.CreateTime, Name = a.Name, SubSystem = b.CnName, SubSystemId = b.Id }) .ToPagedListAsync(input.PageIndex, input.PageSize); //.OrderByIF(input.TrackTemplateId > 0, // (a, b) => SqlFunc.IIF(a.Id == input.TrackTemplateId, SqlFunc.DateAdd(SqlFunc.GetDate(), 1), //a.CreateTime), OrderByType.Desc) return pagedList; } /// public async Task> GetContentPageAsync( GetTrackTemplateContentPageInputVO input) { return await Context.Queryable() .InnerJoin((templateContent, trackContent) => templateContent.TrackContentId == trackContent.Id && !trackContent.IsDeleted) .LeftJoin((templateContent, trackContent, trackStatus) => trackContent.TrackStatusId == trackStatus.Id && !trackStatus.IsDeleted) .LeftJoin((templateContent, trackContent, trackStatus, enumValue) => enumValue.Property == EnumPropertyEnums.节点.GetDescription() && trackStatus.Node == enumValue.Enumkey && !enumValue.IsDeleted) .LeftJoin((templateContent, trackContent, trackStatus, enumValue, createUser) => templateContent.CreateUserId == createUser.Id && !createUser.IsDeleted) .LeftJoin( (templateContent, trackContent, trackStatus, enumValue, createUser, updateUser) => templateContent.UpdateUserId == updateUser.Id && !updateUser.IsDeleted) .Filter(null, true) .Where(templateContent => input.TrackTemplateIds.Contains(templateContent.TrackTemplateId) && !templateContent.IsDeleted) .Select((templateContent, trackContent, trackStatus, enumValue, createUser, updateUser) => new GetTrackTemplateContentPageOutputVO { Id = templateContent.Id, TrackStatus = trackStatus.Status, Node = enumValue.Disp, TrackFlag = SqlFunc.Subqueryable() .Where(x => SqlFunc.SplitIn(trackContent.TrackFlagId, x.Id.ToString())) .SelectStringJoin(x => x.Name, ","), CreateTime = templateContent.CreateTime, CreateUser = createUser.Name, UpdateTime = templateContent.UpdateTime, UpdateUser = updateUser.Name }, true) .OrderBy(templateContent => templateContent.Sort) .ToPagedListAsync(input.PageIndex, input.PageSize); } /// public async Task GetContentDetailAsync(int id) { return await Context.Queryable() .InnerJoin((templateContent, trackContent) => templateContent.TrackContentId == trackContent.Id && !trackContent.IsDeleted) .LeftJoin((templateContent, trackContent, trackStatus) => trackContent.TrackStatusId == trackStatus.Id && !trackStatus.IsDeleted) .Filter(null, true) .Where(templateContent => templateContent.Id == id && !templateContent.IsDeleted) .Select( (templateContent, trackContent, trackStatus) => new GetTrackTemplateContentDetailOutputVo { Id = templateContent.Id, TrackContent = trackContent.Code + "-" + trackContent.Content, TrackStatus = trackStatus.Status }, true) .SingleAsync(); } /// public async Task IsContentAnyAsync(Expression> whereExpression) { return await Context.Queryable().Where(whereExpression).AnyAsync(); } /// public async Task InsertContentAsync(TrackTemplateContentEntity insertObj) { return await Context.Insertable(insertObj).ExecuteCommandAsync() > 0; } /// public async Task GetContentByIdAsync(int id) { return await Context.Queryable().InSingleAsync(id); } /// public async Task UpdateContentAsync(TrackTemplateContentEntity updateObj) { return await Context.Updateable(updateObj).ExecuteCommandHasChangeAsync(); } /// public async Task SoftDeleteContentAsync(int id) { return await Context.Updateable() .Where(x => x.Id == id) .SetColumns(nameof(ISoftDeleteBasicEntity.IsDeleted), true) .ExecuteCommandHasChangeAsync(); } public async Task> GetContentListAsync( Expression> whereExpression) { return await Context.Queryable().Where(whereExpression).ToListAsync(); } public async Task UpdateContentRangeAsync(List updateObjs) { return await Context.Updateable(updateObjs).ExecuteCommandHasChangeAsync(); } public async Task ContentMaxAsync(Expression> columns, Expression> whereExpression) { return await Context.Queryable().Where(whereExpression).MaxAsync(columns); } public async Task UpdateContentAsync(Expression> columns, Expression> whereExpression) { return await Context.Updateable().SetColumns(columns).Where(whereExpression) .ExecuteCommandHasChangeAsync(); } public async Task> GetTrackTemplateListAsync(GetTrackTemplateListInputVo input) { var templates = await Context.Queryable() .Where(x => x.SubSystemId == input.SubSystemId) .WhereIF(input.CustomerId.HasValue, x => x.CustomerId == input.CustomerId) .WhereIF(input.TemplateType.HasValue, x => x.CategoryId == input.TemplateType) .Select(x => new TrackTemplateOutputVo { Id = x.Id, TemplateName = x.Name, TemplateCode = x.Code, }) .ToListAsync(); if (templates == default) return new List(); var templateIds = templates.Select(x => x.Id).ToArray(); var contents = await Context.Queryable() .LeftJoin((a, b) => a.TrackContentId == b.Id) .LeftJoin((a, b, c) => b.TrackStatusId == c.Id) .LeftJoin((a, b, c, d) => c.Node == d.Id) .Where(a => templateIds.Contains(a.TrackTemplateId)) .Select((a, b, c, d) => new TemplateContentDtoVo { TemplateId = a.TrackTemplateId, Code = b.Code, ContentCn = b.Content, ContentEn = b.EnContent, Status = c.Status, Node = d.NodeName }) .ToListAsync(); foreach (var template in templates) { var templateContents = contents.Where(x => x.TemplateId == template.Id).ToList(); template.TemplateContents = templateContents; } return templates; } public async Task> GetContentByTemplateCodes(string[] codes, int systemId) { var sql = @$" select distinct c.Code from t_track_template a left join t_track_template_content b on a.id = b.TrackTemplateId and b.IsDeleted = 0 left join t_track_content c on b.TrackContentId = c.Id and c.IsDeleted = 0 where a.SubSystemId = {systemId} and a.Code in (@codes) and a.IsDeleted = 0 "; var list = Context.Ado.SqlQuery(sql, new {codes = codes}).ToList(); return list; } }