ABP VNext 级联查询

1.Domain层新建实体

SiteInspectPlan 包含多个SiteInspectRoute ,SiteInspectRoute 包含多个SiteInspectRouteItem

 public class SiteInspectPlan : AuditedAggregateRoot<Guid>
    {
        private SiteInspectPlan()
        {
            SiteInspectRoutes = new List<SiteInspectRoute>();
        }


        public SiteInspectPlan(
            Guid id,
            string planCode,
            string planName,
            int category,
            string planSummary,
            Guid teamId,
            string teamName,
            int? repeatMode,
            DateTime startTime,
            DateTime? endTime,
            string cycleTag,
            string cycleCron,
            int? warnMode,
            int warnTime,
            int planStatus,
            string description,
            bool isPublic,
            int status,
            string creator,
            string modifier
        ) : base(id)
        {
            SetPlanCode(planCode);
            SetPlanName(planName);
            SetCategory(category);
            SetPlanSummary(planSummary);
            SetTeamId(teamId);
            SetTeamName(teamName);
            SetRepeatMode(repeatMode);
            SetStartTime(startTime);
            SetEndTime(endTime);
            SetCycleTag(cycleTag);
            SetCycleCron(cycleCron);
            SetWarnMode(warnMode);
            SetWarnTime(warnTime);
            SetPlanStatus(planStatus);
            SetDescription(description);
            SetIsPublic(isPublic);
            SetStatus(status);
            SetCreator(creator);
            SetModifier(modifier);
            SiteInspectRoutes = new List<SiteInspectRoute>();
        }

        /// <summary>
        /// 计划流水号
        /// </summary>
        public string PlanCode { get; private set; }
        /// <summary>
        /// 计划名称
        /// </summary>
        public string PlanName { get; private set; }
        /// <summary>
        /// 计划类型 <1=巡检,2=点检>
        /// </summary>
        public int Category { get; private set; }
        /// <summary>
        /// 方案说明
        /// </summary>
        public string PlanSummary { get; private set; }
        /// <summary>
        /// 执行班组
        /// </summary>
        public Guid TeamId { get; private set; }
        /// <summary>
        /// 执行班组名称
        /// </summary>
        public string TeamName { get; private set; }
        /// <summary>
        /// 循环方式
        /// </summary>
        public int? RepeatMode { get; private set; }
        /// <summary>
        /// 方案起始时间
        /// </summary>
        public DateTime StartTime { get; private set; }
        /// <summary>
        /// 方案截止时间
        /// </summary>
        public DateTime? EndTime { get; private set; }
        /// <summary>
        /// 保养周期
        /// </summary>
        public string CycleTag { get; private set; }
        /// <summary>
        /// 保养周期表达式
        /// </summary>
        public string CycleCron { get; private set; }
        /// <summary>
        /// 预警方式
        /// </summary>
        public int? WarnMode { get; private set; }
        /// <summary>
        /// 提前预警时间 默认=1
        /// </summary>
        public int WarnTime { get; private set; }
        /// <summary>
        /// 计划状态
        /// </summary>
        public int PlanStatus { get; private set; }
        /// <summary>
        /// 描述
        /// </summary>
        public string Description { get; private set; }
        /// <summary>
        /// 发布
        /// </summary>
        public bool IsPublic { get; private set; }
        /// <summary>
        /// 状态
        /// </summary>
        public int Status { get; private set; }
        /// <summary>
        /// 创建人
        /// </summary>
        public string Creator { get; private set; }
        /// <summary>
        /// 修改人
        /// </summary>
        public string Modifier { get; private set; }

        public List<SiteInspectRoute> SiteInspectRoutes { get; set; }

        /// <summary>
        /// 设置计划流水号
        /// </summary>        
        private void SetPlanCode(string planCode)
        {
            Check.NotNullOrWhiteSpace(planCode, nameof(planCode), 64, 0);
            PlanCode = planCode;
        }

        /// <summary>
        /// 设置计划名称
        /// </summary>        
        private void SetPlanName(string planName)
        {
            Check.NotNullOrWhiteSpace(planName, nameof(planName), 128, 0);
            PlanName = planName;
        }

        /// <summary>
        /// 设置计划类型 <1=巡检,2=点检>
        /// </summary>        
        private void SetCategory(int category)
        {
            Category = category;
        }

        /// <summary>
        /// 设置方案说明
        /// </summary>        
        private void SetPlanSummary(string planSummary)
        {
            Check.Length(planSummary, nameof(planSummary), 512, 0);
            PlanSummary = planSummary;
        }

        /// <summary>
        /// 设置执行班组
        /// </summary>        
        private void SetTeamId(Guid teamId)
        {
            TeamId = teamId;
        }

        /// <summary>
        /// 设置执行班组名称
        /// </summary>        
        private void SetTeamName(string teamName)
        {
            Check.NotNullOrWhiteSpace(teamName, nameof(teamName), 64, 0);
            TeamName = teamName;
        }

        /// <summary>
        /// 设置循环方式
        /// </summary>        
        private void SetRepeatMode(int? repeatMode)
        {
            RepeatMode = repeatMode;
        }

        /// <summary>
        /// 设置方案起始时间
        /// </summary>        
        private void SetStartTime(DateTime startTime)
        {
            StartTime = startTime;
        }

        /// <summary>
        /// 设置方案截止时间
        /// </summary>        
        private void SetEndTime(DateTime? endTime)
        {
            EndTime = endTime;
        }

        /// <summary>
        /// 设置保养周期
        /// </summary>        
        private void SetCycleTag(string cycleTag)
        {
            Check.Length(cycleTag, nameof(cycleTag), 128, 0);
            CycleTag = cycleTag;
        }

        /// <summary>
        /// 设置保养周期表达式
        /// </summary>        
        private void SetCycleCron(string cycleCron)
        {
            Check.Length(cycleCron, nameof(cycleCron), 64, 0);
            CycleCron = cycleCron;
        }

        /// <summary>
        /// 设置预警方式
        /// </summary>        
        private void SetWarnMode(int? warnMode)
        {
            WarnMode = warnMode;
        }

        /// <summary>
        /// 设置提前预警时间 默认=1
        /// </summary>        
        private void SetWarnTime(int warnTime)
        {
            WarnTime = warnTime;
        }

        /// <summary>
        /// 设置计划状态
        /// </summary>        
        private void SetPlanStatus(int planStatus)
        {
            PlanStatus = planStatus;
        }

        /// <summary>
        /// 设置描述
        /// </summary>        
        private void SetDescription(string description)
        {
            Check.Length(description, nameof(description), 512, 0);
            Description = description;
        }

        /// <summary>
        /// 设置发布
        /// </summary>        
        public  void SetIsPublic(bool isPublic)
        {
            IsPublic = isPublic;
        }

        /// <summary>
        /// 设置状态
        /// </summary>        
        private void SetStatus(int status)
        {
            Status = status;
        }

        /// <summary>
        /// 设置创建人
        /// </summary>        
        private void SetCreator(string creator)
        {
            Check.NotNullOrWhiteSpace(creator, nameof(creator), 64, 0);
            Creator = creator;
        }

        /// <summary>
        /// 设置修改人
        /// </summary>        
        private void SetModifier(string modifier)
        {
            Check.Length(modifier, nameof(modifier), 64, 0);
            Modifier = modifier;
        }

        /// <summary>
        /// 更新巡检计划
        /// </summary> 
        public void Update(
            string planCode,
            string planName,
            int category,
            string planSummary,
            Guid teamId,
            string teamName,
            int? repeatMode,
            DateTime startTime,
            DateTime? endTime,
            string cycleTag,
            string cycleCron,
            int? warnMode,
            int warnTime,
            int planStatus,
            string description,
            bool isPublic,
            int status,
            string creator,
            string modifier
        )
        {
            SetPlanCode(planCode);
            SetPlanName(planName);
            SetCategory(category);
            SetPlanSummary(planSummary);
            SetTeamId(teamId);
            SetTeamName(teamName);
            SetRepeatMode(repeatMode);
            SetStartTime(startTime);
            SetEndTime(endTime);
            SetCycleTag(cycleTag);
            SetCycleCron(cycleCron);
            SetWarnMode(warnMode);
            SetWarnTime(warnTime);
            SetPlanStatus(planStatus);
            SetDescription(description);
            SetIsPublic(isPublic);
            SetStatus(status);
            SetCreator(creator);
            SetModifier(modifier);
        }
    }


 public class SiteInspectRoute : AuditedAggregateRoot<Guid>
    {
        private SiteInspectRoute()
        {
            SiteInspectRouteItems=new List<SiteInspectRouteItem>();
        }


        public SiteInspectRoute(
            Guid id,
            Guid planId,
            Guid equipAssetId,
            int routeNum,
            string description,
            int status,
            string creator,
            string modifier
        ) : base(id)
        {
            SetPlanId(planId);
            SetEquipAssetId(equipAssetId);
            SetRouteNum(routeNum);
            SetDescription(description);
            SetStatus(status);
            SetCreator(creator);
            SetModifier(modifier);
            SiteInspectRouteItems = new List<SiteInspectRouteItem>();
        }

        /// <summary>
        /// 方案外键
        /// </summary>
        public Guid PlanId { get; private set; }
        /// <summary>
        /// 设备外键
        /// </summary>
        public Guid EquipAssetId { get; private set; }
        /// <summary>
        /// 路线序号
        /// </summary>
        public int RouteNum { get; private set; }
        /// <summary>
        /// 描述
        /// </summary>
        public string Description { get; private set; }
        /// <summary>
        /// 状态
        /// </summary>
        public int Status { get; private set; }
        /// <summary>
        /// 创建人
        /// </summary>
        public string Creator { get; private set; }
        /// <summary>
        /// 修改人
        /// </summary>
        public string Modifier { get; private set; }


        public List<SiteInspectRouteItem> SiteInspectRouteItems { get; set; }
        /// <summary>
        /// 设置方案外键
        /// </summary>        
        private void SetPlanId(Guid planId)
        {
            PlanId = planId;
        }

        /// <summary>
        /// 设置设备外键
        /// </summary>        
        private void SetEquipAssetId(Guid equipAssetId)
        {
            EquipAssetId = equipAssetId;
        }

        /// <summary>
        /// 设置路线序号
        /// </summary>        
        private void SetRouteNum(int routeNum)
        {
            RouteNum = routeNum;
        }

        /// <summary>
        /// 设置描述
        /// </summary>        
        private void SetDescription(string description)
        {
            Check.Length(description, nameof(description), 512, 0);
            Description = description;
        }

        /// <summary>
        /// 设置状态
        /// </summary>        
        private void SetStatus(int status)
        {
            Status = status;
        }

        /// <summary>
        /// 设置创建人
        /// </summary>        
        private void SetCreator(string creator)
        {
            Check.NotNullOrWhiteSpace(creator, nameof(creator),  64, 0);
            Creator = creator;
        }

        /// <summary>
        /// 设置修改人
        /// </summary>        
        private void SetModifier(string modifier)
        {
            Check.Length(modifier, nameof(modifier), 64, 0);
            Modifier = modifier;
        }

        /// <summary>
        /// 更新巡检路线
        /// </summary> 
        public void Update(
            Guid planId,
            Guid equipAssetId,
            int routeNum,
            string description,
            int status,
            string creator,
            string modifier
        )
        {
            SetPlanId(planId);
            SetEquipAssetId(equipAssetId);
            SetRouteNum(routeNum);
            SetDescription(description);
            SetStatus(status);
            SetCreator(creator);
            SetModifier(modifier);
        }
    }
public class SiteInspectRouteItem : AuditedAggregateRoot<Guid>
    {
        private SiteInspectRouteItem()
        {
        }


        public SiteInspectRouteItem(
            Guid id,
            Guid routeId,
            int itemIndex,
            string itemName,
            string groupCode,
            string groupName,
            string itemContent,
            string attachFile,
            string description,
            int status,
            string creator,
            string modifier
        ) : base(id)
        {
            SetRouteId(routeId);
            SetItemIndex(itemIndex);
            SetItemName(itemName);
            SetGroupCode(groupCode);
            SetGroupName(groupName);
            SetItemContent(itemContent);
            SetAttachFile(attachFile);
            SetDescription(description);
            SetStatus(status);
            SetCreator(creator);
            SetModifier(modifier);
        }

        /// <summary>
        /// 路线外键
        /// </summary>
        public Guid RouteId { get; private set; }
        /// <summary>
        /// 行号
        /// </summary>
        public int ItemIndex { get; private set; }
        /// <summary>
        /// 项目名称
        /// </summary>
        public string ItemName { get; private set; }
        /// <summary>
        /// 分组编码
        /// </summary>
        public string GroupCode { get; private set; }
        /// <summary>
        /// 分组名称
        /// </summary>
        public string GroupName { get; private set; }
        /// <summary>
        /// 巡检内容
        /// </summary>
        public string ItemContent { get; private set; }
        /// <summary>
        /// 附件
        /// </summary>
        public string AttachFile { get; private set; }
        /// <summary>
        /// 描述
        /// </summary>
        public string Description { get; private set; }
        /// <summary>
        /// 状态
        /// </summary>
        public int Status { get; private set; }
        /// <summary>
        /// 创建人
        /// </summary>
        public string Creator { get; private set; }
        /// <summary>
        /// 修改人
        /// </summary>
        public string Modifier { get; private set; }



        /// <summary>
        /// 设置路线外键
        /// </summary>        
        private void SetRouteId(Guid routeId)
        {
            RouteId = routeId;
        }

        /// <summary>
        /// 设置行号
        /// </summary>        
        private void SetItemIndex(int itemIndex)
        {
            ItemIndex = itemIndex;
        }

        /// <summary>
        /// 设置项目名称
        /// </summary>        
        private void SetItemName(string itemName)
        {
            Check.NotNullOrWhiteSpace(itemName, nameof(itemName),  512, 0);
            ItemName = itemName;
        }

        /// <summary>
        /// 设置分组编码
        /// </summary>        
        private void SetGroupCode(string groupCode)
        {
            Check.NotNullOrWhiteSpace(groupCode, nameof(groupCode), 64, 0);
            GroupCode = groupCode;
        }

        /// <summary>
        /// 设置分组名称
        /// </summary>        
        private void SetGroupName(string groupName)
        {
            Check.NotNullOrWhiteSpace(groupName, nameof(groupName),  256, 0);
            GroupName = groupName;
        }

        /// <summary>
        /// 设置巡检内容
        /// </summary>        
        private void SetItemContent(string itemContent)
        {
            Check.Length(itemContent, nameof(itemContent), 2048, 0);
            ItemContent = itemContent;
        }

        /// <summary>
        /// 设置附件
        /// </summary>        
        private void SetAttachFile(string attachFile)
        {
            Check.Length(attachFile, nameof(attachFile), 1024, 0);
            AttachFile = attachFile;
        }

        /// <summary>
        /// 设置描述
        /// </summary>        
        private void SetDescription(string description)
        {
            Check.Length(description, nameof(description), 512, 0);
            Description = description;
        }

        /// <summary>
        /// 设置状态
        /// </summary>        
        private void SetStatus(int status)
        {
            Status = status;
        }

        /// <summary>
        /// 设置创建人
        /// </summary>        
        private void SetCreator(string creator)
        {
            Check.NotNullOrWhiteSpace(creator, nameof(creator), 64, 0);
            Creator = creator;
        }

        /// <summary>
        /// 设置修改人
        /// </summary>        
        private void SetModifier(string modifier)
        {
            Check.Length(modifier, nameof(modifier), 64, 0);
            Modifier = modifier;
        }

        /// <summary>
        /// 更新巡检路线项目列表
        /// </summary> 
        public void Update(
            Guid routeId,
            int itemIndex,
            string itemName,
            string groupCode,
            string groupName,
            string itemContent,
            string attachFile,
            string description,
            int status,
            string creator,
            string modifier
        )
        {
            SetRouteId(routeId);
            SetItemIndex(itemIndex);
            SetItemName(itemName);
            SetGroupCode(groupCode);
            SetGroupName(groupName);
            SetItemContent(itemContent);
            SetAttachFile(attachFile);
            SetDescription(description);
            SetStatus(status);
            SetCreator(creator);
            SetModifier(modifier);
        }
    }

2.EntityFrameworkCore层

2.1 DbContext

  public DbSet<SiteInspectPlan> SiteInspectPlans { get; set; }

2.2 IDbContext

  DbSet<SiteInspectPlan> SiteInspectPlans { get; set; }

2.3 DbContextModelCreatingExtensions

     builder.Entity<SiteInspectPlan>(b =>
            {
                b.ToTable(EquipDbProperties.DbTableV2Prefix + typeof(SiteInspectPlan).Pluralize(), EquipDbProperties.DbSchema);
                b.Property(e => e.PlanCode).IsRequired().HasMaxLength(64).HasComment("计划流水号");
                b.Property(e => e.PlanName).IsRequired().HasMaxLength(128).HasComment("计划名称");
                b.Property(e => e.Category).HasComment("计划类型 <1=巡检,2=点检>");
                b.Property(e => e.PlanSummary).HasComment("方案说明");
                b.Property(e => e.TeamId).HasComment("执行班组");
                b.Property(e => e.TeamName).IsRequired().HasMaxLength(64).HasComment("执行班组名称");
                b.Property(e => e.RepeatMode).HasComment("循环方式");
                b.Property(e => e.StartTime).HasComment("方案起始时间");
                b.Property(e => e.EndTime).HasComment("方案截止时间");
                b.Property(e => e.CycleTag).HasComment("保养周期");
                b.Property(e => e.CycleCron).HasComment("保养周期表达式");
                b.Property(e => e.WarnMode).HasComment("预警方式");
                b.Property(e => e.WarnTime).HasComment("提前预警时间 默认=1");
                b.Property(e => e.PlanStatus).HasComment("计划状态");
                b.Property(e => e.Description).HasComment("描述");
                b.Property(e => e.IsPublic).HasComment("发布");
                b.Property(e => e.Status).HasComment("状态");
                b.Property(e => e.Creator).IsRequired().HasMaxLength(64).HasComment("创建人");
                b.Property(e => e.Modifier).HasComment("修改人");
                b.HasMany(e => e.SiteInspectRoutes).WithOne().HasForeignKey(ur => ur.PlanId).HasPrincipalKey(u => u.Id).IsRequired();
                b.ConfigureByConvention();
            });
            builder.Entity<SiteInspectRoute>(b =>
            {
                b.ToTable(EquipDbProperties.DbTableV2Prefix + typeof(SiteInspectRoute).Pluralize(), EquipDbProperties.DbSchema);
                b.Property(e => e.PlanId).HasComment("方案外键");
                b.Property(e => e.EquipAssetId).HasComment("设备外键");
                b.Property(e => e.RouteNum).HasComment("路线序号");
                b.Property(e => e.Description).HasComment("描述");
                b.Property(e => e.Status).HasComment("状态");
                b.Property(e => e.Creator).IsRequired().HasMaxLength(64).HasComment("创建人");
                b.Property(e => e.Modifier).HasComment("修改人");
                b.HasMany(e => e.SiteInspectRouteItems).WithOne().HasForeignKey(ur => ur.RouteId).HasPrincipalKey(u => u.Id).IsRequired();
                b.ConfigureByConvention();
            });
            builder.Entity<SiteInspectRouteItem>(b =>
            {
                b.ToTable(EquipDbProperties.DbTableV2Prefix + typeof(SiteInspectRouteItem).Pluralize(), EquipDbProperties.DbSchema);
                b.Property(e => e.RouteId).HasComment("路线外键");
                b.Property(e => e.ItemIndex).HasComment("行号");
                b.Property(e => e.ItemName).IsRequired().HasMaxLength(512).HasComment("项目名称");
                b.Property(e => e.GroupCode).IsRequired().HasMaxLength(64).HasComment("分组编码");
                b.Property(e => e.GroupName).IsRequired().HasMaxLength(256).HasComment("分组名称");
                b.Property(e => e.ItemContent).HasComment("巡检内容");
                b.Property(e => e.AttachFile).HasComment("附件");
                b.Property(e => e.Description).HasComment("描述");
                b.Property(e => e.Status).HasComment("状态");
                b.Property(e => e.Creator).IsRequired().HasMaxLength(64).HasComment("创建人");
                b.Property(e => e.Modifier).HasComment("修改人");
                b.ConfigureByConvention();
            });

2.4 EntityFrameworkCoreModule

  //默认的级联查询配置
        Configure<AbpEntityOptions>(options =>
        {
            options.Entity<SiteInspectPlan>(DemandOrderOptions =>
            {
                DemandOrderOptions.DefaultWithDetailsFunc = query => query.Include(o => o.SiteInspectRoutes).ThenInclude(s=>s.SiteInspectRouteItems);
            });
        });

3.Application服务层

如果SiteInspectPlan下面只有平级的SiteInspectRoutes,SiteInspectRouteItem的集合,那么不需要在EntityFrameworkCoreModule配置级联查询,只需要像下面调用
eg:

==如果SiteInspectRoutes和SiteInspectRouteItem都是SiteInspectPlan的子集合==
siteInspectPlanRepository.WithDetailsAsync(s => s.SiteInspectRoutes, s => s.SiteInspectRouteItem)
 public class SiteInspectPlanService : EquipAppService, ISiteInspectPlanService
    {
        private readonly IRepository<SiteInspectPlan, Guid> _siteInspectPlanRepository;

        public SiteInspectPlanService(IRepository<SiteInspectPlan, Guid> siteInspectPlanRepository)
        {
            _siteInspectPlanRepository = siteInspectPlanRepository;
        }


        /// <summary>
        /// 查询单条
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public async Task<SiteInspectPlanInfoRes> GetAsync(Guid id)
        {
            var siteInspectPlan = (await _siteInspectPlanRepository.WithDetailsAsync()).FirstOrDefault(s=>s.Id==id) ?? throw new UserFriendlyException("巡检计划不存在!");
            return ObjectMapper.Map<SiteInspectPlan, SiteInspectPlanInfoRes>(siteInspectPlan);
        }


        /// <summary>
        /// 分页查询巡检项目
        /// </summary>
        /// <returns></returns>
        public async Task<SiteInspectPlanRes> GetListAsync(PagingSiteInspectPlanReq input)
        {
            var dyParams = HttpContext.Request.Query.GetDynamicParams();
            var query = (await _siteInspectPlanRepository.WithDetailsAsync()).Where(dyParams.QueryKeys, dyParams.QueryValues.ToArray());
            var queryList = query.Skip(input.SkipCount).Take(input.PageSize).ToList();
            return new SiteInspectPlanRes(query.ToList().Count, ObjectMapper.Map<List<SiteInspectPlan>, List<SiteInspectPlanInfoRes>>(queryList));
        }


        /// <summary>
        /// 创建巡检计划
        /// </summary>
        public async Task CreateAsync(CreateSiteInspectPlanReq input)
        {
            //判断该巡检计划是否重复
            var exist = (await _siteInspectPlanRepository.GetListAsync(s => s.PlanName == input.PlanName)).Any();
            if (exist) throw new UserFriendlyException("该巡检计划已经存在!");
            //巡检计划编码
            string codeName = "SiteInspectPlanCode";
            var planCode = await BillNumberGenerator.GetByNameAsync(codeName);
            var siteInspectPlanExist = await _siteInspectPlanRepository.FindAsync(a => a.PlanCode == planCode);
            if (siteInspectPlanExist is not null) throw new UserFriendlyException("相同编号不能重复添加");

            SiteInspectPlan siteInspectPlan = new (GuidGenerator.Create(), planCode, input.PlanName,input.Category,input.PlanSummary, input.TeamId,input.TeamName,input.RepeatMode,input.StartTime,input.EndTime,input.CycleTag,input.CycleCron,input.WarnMode,input.WarnTime,1,input.Description,false,1, CurrentUser.Name, "");
            foreach (var s in input.SiteInspectRoutes)
            {
                SiteInspectRoute siteInspectRoute = new(GuidGenerator.Create(), siteInspectPlan.Id, s.EquipAssetId, s.RouteNum, s.Description, 1, CurrentUser.Name, "");
                foreach (var item in s.SiteInspectRouteItems)
                {
                    siteInspectRoute.SiteInspectRouteItems.Add(new SiteInspectRouteItem (GuidGenerator.Create(), siteInspectRoute.Id, item.ItemIndex, item.ItemName,item.GroupCode, item.GroupName, item.ItemContent,item.AttachFile,item.Description,1, CurrentUser.Name,""));
                }
                siteInspectPlan.SiteInspectRoutes.Add(siteInspectRoute);
            }
            await _siteInspectPlanRepository.InsertAsync(siteInspectPlan);
        }

        /// <summary>
        /// 编辑巡检计划
        /// </summary>
        public async Task UpdateAsync(UpdateSiteInspectPlanReq input)
        {
            var siteInspectPlan = (await _siteInspectPlanRepository.WithDetailsAsync(s => s.SiteInspectRoutes)).FirstOrDefault(s=>s.Id==input.Id) ?? throw new UserFriendlyException("巡检计划不存在!");
            siteInspectPlan.SiteInspectRoutes.Clear();
            foreach (var s in input.SiteInspectRoutes)
            {
                SiteInspectRoute siteInspectRoute = new(GuidGenerator.Create(), siteInspectPlan.Id, s.EquipAssetId, s.RouteNum, s.Description, 1, CurrentUser.Name, "");
                foreach (var item in s.SiteInspectRouteItems)
                {
                    siteInspectRoute.SiteInspectRouteItems.Add(new SiteInspectRouteItem(GuidGenerator.Create(), siteInspectRoute.Id, item.ItemIndex, item.ItemName, item.GroupCode, item.GroupName, item.ItemContent, item.AttachFile, item.Description, 1, CurrentUser.Name, ""));
                }
                siteInspectPlan.SiteInspectRoutes.Add(siteInspectRoute);
            }
            await _siteInspectPlanRepository.UpdateAsync(siteInspectPlan);
        }

    }


3.1 ApplicationAutoMapperProfile

   CreateMap<SiteInspectPlan, SiteInspectPlanInfoRes>();
   CreateMap<SiteInspectRoute, SiteInspectRouteInfoRes>();
   CreateMap<SiteInspectRouteItem, SiteInspectRouteItemInfoRes>();

4.Application.Contracts层

public class SiteInspectPlanRes
    {
        public int TotalNumber { get; set; }

        public IEnumerable<SiteInspectPlanInfoRes> Rows { get; set; }

        public SiteInspectPlanRes(int totalNumber, List<SiteInspectPlanInfoRes> repairJobs)
        {
            this.TotalNumber = totalNumber;
            this.Rows = repairJobs;
        }
    }

    public class SiteInspectPlanInfoRes
    {
        /// <summary>
        /// 主键Id
        /// </summary>
        public Guid Id { get; set; }

        /// <summary>
        /// 创建时间
        /// </summary>
        public DateTime CreationTime { get; set; }

        /// <summary>
        /// 计划流水号
        /// </summary>
        public string PlanCode { get; set; }
        /// <summary>
        /// 计划名称
        /// </summary>
        public string PlanName { get; set; }
        /// <summary>
        /// 计划类型 (1=巡检,2=点检)
        /// </summary>
        public int Category { get; set; }
        /// <summary>
        /// 方案说明
        /// </summary>
        public string PlanSummary { get; set; }
        /// <summary>
        /// 执行班组
        /// </summary>
        public Guid TeamId { get; set; }
        /// <summary>
        /// 执行班组名称
        /// </summary>
        public string TeamName { get; set; }
        /// <summary>
        /// 循环方式
        /// </summary>
        public int? RepeatMode { get; set; }
        /// <summary>
        /// 方案起始时间
        /// </summary>
        public DateTime StartTime { get; set; }
        /// <summary>
        /// 方案截止时间
        /// </summary>
        public DateTime? EndTime { get; set; }
        /// <summary>
        /// 保养周期
        /// </summary>
        public string CycleTag { get; set; }
        /// <summary>
        /// 保养周期表达式
        /// </summary>
        public string CycleCron { get; set; }
        /// <summary>
        /// 预警方式
        /// </summary>
        public int? WarnMode { get; set; }
        /// <summary>
        /// 提前预警时间 默认=1
        /// </summary>
        public int WarnTime { get; set; }
        /// <summary>
        /// 计划状态
        /// </summary>
        public int PlanStatus { get; set; }
        /// <summary>
        /// 描述
        /// </summary>
        public string Description { get; set; }
        /// <summary>
        /// 发布
        /// </summary>
        public bool IsPublic { get; set; }
        /// <summary>
        /// 状态
        /// </summary>
        public int Status { get; set; }
        /// <summary>
        /// 创建人
        /// </summary>
        public string Creator { get; set; }
        /// <summary>
        /// 修改人
        /// </summary>
        public string Modifier { get; set; }

        public List<SiteInspectRouteInfoRes> SiteInspectRoutes { get; set; }
    }

    public class SiteInspectRouteInfoRes {

        /// <summary>
        /// 主键Id
        /// </summary>
        public Guid Id { get; set; }

        /// <summary>
        /// 创建时间
        /// </summary>
        public DateTime CreationTime { get; set; }

        /// <summary>
        /// 方案外键
        /// </summary>
        public Guid PlanId { get; set; }
        /// <summary>
        /// 设备外键
        /// </summary>
        public Guid EquipAssetId { get; set; }
        /// <summary>
        /// 路线序号
        /// </summary>
        public int RouteNum { get; set; }
        /// <summary>
        /// 描述
        /// </summary>
        public string Description { get; set; }
        /// <summary>
        /// 状态
        /// </summary>
        public int Status { get; set; }
        /// <summary>
        /// 创建人
        /// </summary>
        public string Creator { get; set; }
        /// <summary>
        /// 修改人
        /// </summary>
        public string Modifier { get; set; }

        public List<SiteInspectRouteItemInfoRes> SiteInspectRouteItems { get; set; }
    }

    public class SiteInspectRouteItemInfoRes
    {
        /// <summary>
        /// 主键Id
        /// </summary>
        public Guid Id { get; set; }

        /// <summary>
        /// 创建时间
        /// </summary>
        public DateTime CreationTime { get; set; }

        /// <summary>
        /// 路线外键
        /// </summary>
        public Guid RouteId { get; set; }
        /// <summary>
        /// 行号
        /// </summary>
        public int ItemIndex { get; set; }
        /// <summary>
        /// 项目名称
        /// </summary>
        public string ItemName { get; set; }
        /// <summary>
        /// 分组编码
        /// </summary>
        public string GroupCode { get; set; }
        /// <summary>
        /// 分组名称
        /// </summary>
        public string GroupName { get; set; }
        /// <summary>
        /// 巡检内容
        /// </summary>
        public string ItemContent { get; set; }
        /// <summary>
        /// 附件
        /// </summary>
        public string AttachFile { get; set; }
        /// <summary>
        /// 描述
        /// </summary>
        public string Description { get; set; }
        /// <summary>
        /// 状态
        /// </summary>
        public int Status { get; set; }
        /// <summary>
        /// 创建人
        /// </summary>
        public string Creator { get; set; }
        /// <summary>
        /// 修改人
        /// </summary>
        public string Modifier { get; set; }
    }
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值