zoukankan      html  css  js  c++  java
  • abp vnext 创建档案管理Api

    引言

    创建档案管理项目后端,实现附件的增删改查,引用abp vnext最佳实践。

    创建Web Api项目

    使用空Web应用程序创建项目

    1.创建Asp.net core 5 web api项目Hx.Archives.Api。

    2.安装Nuget包:Volo.Abp.AspNetCore.MvcVolo.Abp.Autofac

    3.创建Module,添加依赖:[DependsOn(typeof(AbpAspNetCoreMvcModule))][DependsOn(typeof(AbpAutofacModule))]

    4.修改Startup类。

    5.修改Program类。

    6.添加swagger。

    Module:

    [DependsOn(typeof(AbpAspNetCoreMvcModule))]//添加依赖
        [DependsOn(typeof(AbpAutofacModule))]
        public class HxArchivesApiModule : AbpModule
        {
            public override void ConfigureServices(ServiceConfigurationContext context)
            {
                //添加swagger服务
                context.Services.AddSwaggerGen(options =>
                {
                    options.SwaggerDoc("v1", new OpenApiInfo { Title = "档案管理 Api", Version = "v0.1" });
                    options.DocInclusionPredicate((docName, description) => true);
                    options.CustomSchemaIds(type => type.FullName);
                });
            }
            public override void OnApplicationInitialization(
                ApplicationInitializationContext context)
            {
                var app = context.GetApplicationBuilder();
                app.UseStaticFiles();
                app.UseRouting();
                app.UseSwagger();
                app.UseSwaggerUI(options =>
                {
                    options.SwaggerEndpoint("/swagger/v1/swagger.json", "Identity Service API");
                });
                app.UseConfiguredEndpoints();
            }
        }    

    Program:

    public class Program
        {
            public static void Main(string[] args)
            {
                CreateHostBuilder(args).Build().Run();
            }
            public static IHostBuilder CreateHostBuilder(string[] args) =>
                Host.CreateDefaultBuilder(args)
                    .ConfigureWebHostDefaults(webBuilder =>
                    {
                        webBuilder.UseStartup<Startup>();
                    })
                    .UseAutofac();  // 添加这一行
        }

    Startup:

    public class Startup
        {
            public void ConfigureServices(IServiceCollection services)
            {
                services.AddApplication<HxArchivesApiModule>();
            }
            public void Configure(IApplicationBuilder app)
            {
                app.InitializeApplication();
            }
        }

    创建领域层

    1.创建(类库).NET Core项目,命名为Hx.Archives.Domain。

    2.引入Nuget包:Volo.Abp.Ddd.Domain。

    3.创建HxArchivesDomainModule,并引入依赖[DependsOn(typeof(AbpDddDomainModule))]。

    创建实体AttachFile、AttachCatalogue,创建附件类型枚举:AttachTypeEnum。

    HxArchivesDomainModule:

    [DependsOn(typeof(AbpDddDomainModule))]
        public class HxArchivesDomainModule : AbpModule
        {
    
        }

    AttachFile:

    /// <summary>
        /// 附件文件
        /// </summary>
        public class AttachFile : Entity<Guid>
        {
            /// <summary>
            /// 文件名称
            /// </summary>
            public virtual string FileName { get; private set; }
            /// <summary>
            /// 文件别名
            /// </summary>
            public virtual string FileAlias { get; private set; }
            /// <summary>
            /// 文件路径
            /// </summary>
            public virtual string FilePath { get; private set; }
            /// <summary>
            /// 顺序号
            /// </summary>
            public virtual int SequenceNumber { get; private set; }
            /// <summary>
            /// 文件内容
            /// </summary>
            public virtual byte[] DocumentContent { get; private set; }
            /// <summary>
            /// 提供给ORM用来从数据库中获取实体,
            /// 无需初始化子集合因为它会被来自数据库的值覆盖
            /// </summary>
            protected AttachFile()
            { }
            /// <summary>
            /// 创建附件文件,通过文件管理系统持久化
            /// </summary>
            /// <param name="id"></param>
            /// <param name="aliasName"></param>
            /// <param name="sequenceNumber"></param>
            public AttachFile(
                Guid id,
                string aliasName,
                int sequenceNumber)
            {
                Id = id;
                SequenceNumber = sequenceNumber;
                FileAlias = aliasName;
                FileName = id.ToString();
            }
            /// <summary>
            /// 创建附件文件,通过数据库持久化
            /// </summary>
            /// <param name="id"></param>
            /// <param name="aliasName"></param>
            /// <param name="documentContent"></param>
            /// <param name="sequenceNumber"></param>
            public AttachFile(
                Guid id,
                string aliasName,
                byte[] documentContent,
                int sequenceNumber)
            {
                Id = id;
                SequenceNumber = sequenceNumber;
                FileAlias = aliasName;
                DocumentContent = documentContent;
            }
        }

    AttachCatalogue:

    /// <summary>
        /// 附件目录
        /// </summary>
        public class AttachCatalogue : FullAuditedAggregateRoot<Guid>
        {
            /// <summary>
            /// 附件类型
            /// </summary>
            public virtual AttachTypeEnum AttachType { get; private set; }
            /// <summary>
            /// 目录名称
            /// </summary>
            public virtual string CatalogueName { get; private set; }
            /// <summary>
            /// 附件数量
            /// </summary>
            public virtual int AttachCount { get; private set; }
            /// <summary>
            /// 页数
            /// </summary>
            public virtual int PageCount { get; private set; }
            /// <summary>
            /// 是否核验
            /// </summary>
            public virtual bool IsVerification { get; private set; }
            /// <summary>
            /// 是否必收
            /// </summary>
            public virtual bool IsRequired { get; private set; }
            /// <summary>
            /// 顺序号
            /// </summary>
            public virtual int SequenceNumber { get; private set; }
            /// <summary>
            /// 归档状态
            /// </summary>
            public virtual bool ArchivingStatus { get; private set; }
            /// <summary>
            /// 附件文件集合
            /// </summary>
            public virtual Collection<AttachFile> AttachFiles { get; private set; }
            /// <summary>
            /// 提供给ORM用来从数据库中获取实体,
            /// 无需初始化子集合因为它会被来自数据库的值覆盖
            /// </summary>
            protected AttachCatalogue()
            { }
            public AttachCatalogue(
                Guid id,
                AttachTypeEnum attachTypeEnum,
                string catologueName,
                int sequenceNumber,
                Collection<AttachFile> attachFiles = null,
                bool isRequired = true,
                int attachCount = 0,
                int pageCount = 0
                )
            {
                Id = id;
                AttachType = attachTypeEnum;
                CatalogueName = catologueName;
                SequenceNumber = sequenceNumber;
                IsRequired = isRequired;
                AttachCount = attachCount;
                PageCount = pageCount;
                if (attachFiles == null) AttachFiles = new Collection<AttachFile>();
                else AttachFiles = AttachFiles;
            }
            /// <summary>
            /// 验证
            /// </summary>
            public void Verify() => IsVerification = true;
            /// <summary>
            /// 归档
            /// </summary>
            public void Archiving() => ArchivingStatus = true;
            /// <summary>
            /// 添加附件
            /// </summary>
            /// <param name="attach">文件</param>
            public void AddAttachFile(AttachFile attach) => AttachFiles.Add(attach);
            public void AddAttachFiles(Collection<AttachFile> attachFiles) => AttachFiles = attachFiles;
        }

    AttachTypeEnum:

    public enum AttachTypeEnum
        {
            /// <summary>
            /// 原件
            /// </summary>
            OriginalScript = 1,
            /// <summary>
            ///复印件
            /// </summary>
            Copy = 2,
            /// <summary>
            ///原件副本
            /// </summary>
            Duplicate = 3,
            /// <summary>
            ///副本复印件
            /// </summary>
            DuplicateCopy = 4,
            /// <summary>
            ///手稿
            /// </summary>
            Manuscript = 5,
            /// <summary>
            ///原件或复印件
            /// </summary>
            OriginalScriptOrCopy = 6,
            /// <summary>
            ///其它
            /// </summary>
            Other = 99
        }

    创建数据访问EntityFrameworkCore

    1.添加Nuget包:Volo.Abp.EntityFrameworkCore。

    2.创建HxArchivesEntityFrameworkCoreModule,引入依赖:[DependsOn(typeof(AbpEntityFrameworkCoreModule))]、[DependsOn(typeof(HxArchivesDomainModule))]。

    3.创建数据库上下文、上下文接口:ArchivesDbContext、IArchivesDbContext。

    4.创建表名前缀及数据库模式。

    5.创建ModelBuilder扩展类。

    HxArchivesEntityFrameworkCoreModule:

        [DependsOn(typeof(AbpEntityFrameworkCoreModule))]
        [DependsOn(typeof(HxArchivesDomainModule))]
        public class HxArchivesEntityFrameworkCoreModule : AbpModule
        {
    
        }

    ArchivesDbContext:

        [ConnectionStringName("HxArchives")]
        public class ArchivesDbContext : AbpDbContext<ArchivesDbContext>, IArchivesDbContext
        {
            public ArchivesDbContext(DbContextOptions<ArchivesDbContext> options)
                : base(options)
            { }
        }

    IArchivesDbContext:

        [ConnectionStringName("HxArhives")]
        public interface IArchivesDbContext : IEfCoreDbContext
        {
        }

    ArchivesModelBuilderConfigurationOptions:

        public class ArchivesModelBuilderConfigurationOptions : AbpModelBuilderConfigurationOptions
        {
            public ArchivesModelBuilderConfigurationOptions(
                [NotNull] string tablePrefix,
                [CanBeNull] string schema)
                : base(tablePrefix, schema)
            { }
        }
  • 相关阅读:
    @FeignClient常用属性
    前端调用接口成功但后端没收到请求
    @EnableDiscoveryClient与Nacos的服务注册与拉取
    解决WebStorm开发vue提示Module is not installed、Unresolved variable or type
    Docker内使用Nignx
    Docker内运行的nginx除了80端口其他端口都无法访问
    在Win11的WSL中体验IDEA等GUI程序
    python小工具:编码转换
    php nginx 504 Gateway Timeout 网关超时错误
    Centos下安装php mysql pdo以及gd扩展
  • 原文地址:https://www.cnblogs.com/GiserPage/p/14523974.html
Copyright © 2011-2022 走看看