易云开发平台(EaCloud Framework)简称 EaCloud(Easy Cloud Framework),是一个基于.Net 7开发的一个.NetCore快速开发框架。这个框架使用最新稳定版的.NetCore SDK(当前是.NET 7),对 AspNetCore 的配置、依赖注入、日志、缓存、实体框架、WebApi、身份认证、权限授权等模块进行更高一级的自动化封装,并规范了一套业务实现的代码结构与代码编写操作流程,使的实际应用项目开发和运维更高效、更简单。
中国 · 江苏
科技改变未来 · 三擎传承价值
组织介绍

易云开发平台(EaCloud Framework)

Member project of EaCloud Team NuGet Badge GitHub license



EaCloud简介

易云开发平台(Easy Cloud Framework)简称 EaCloud(EaCloud Framework),是一个基于.Net 7开发的一个.NetCore快速开发框架。这个框架使用最新稳定版的.NetCore SDK(当前是.NET 7),对 AspNetCore 的配置、依赖注入、日志、缓存、实体框架、WebApi、身份认证、权限授权等模块进行更高一级的自动化封装,并规范了一套业务实现的代码结构与代码编写操作流程,使的实际应用项目开发和运维更高效、更简单。

后端接口服务项目:

前端中后台项目:

前端移动PDA项目:

演示DEMO:

框架组件

image

  • 【EaCloud】核心组件,封装着框架核心及数据存储,缓存,辅助操作等功能。

  • 【EaCloud.AspNetCore】AspNetCore 组件,提供 AspNetCore 的服务端功能的封装。

  • 【EaCloud.AspNetCore.Diagnostics】AspNetCore 性能诊断组件,提供 AspNetCore 性能诊断功能的封装。

  • 【EaCloud.Authorization.Datas】数据权限组件,对应用中数据权限进行授权的设计实现。

  • 【EaCloud.Authorization.Functions】功能权限组件,API功能权限的设计实现。

  • 【EaCloud.AutoMapper】AutoMapper 对象映射组件,封装基于 AutoMapper 的对象映射功能实现。

  • 【EaCloud.Baidu】Baidu 组件,包含百度地图开放平台接口处理功能。

  • 【EaCloud.EntityFrameworkCore】数据访问组件,封装 EntityFrameworkCore 数据访问功能的实现。

  • 【EaCloud.EntityFrameworkCore.Allinone】EaCloud 一体化数据访问组件,封装 Cosmos(Azure Cosmos DB 的 SQL API)、Kdbndp(人大金仓)、MySql、Oracle、PostgreSql、SapHana、Sqlite、SqlServer 类型数据访问功能的实现。

  • 【EaCloud.EntityFrameworkCore.Cosmos】Azure Cosmos DB 组件,封装基于 Microsoft.EntityFrameworkCore.Cosmos 的数据访问功能的实现(受限于只能使用SQL类型数据库,不建议使用)。

  • 【EaCloud.EntityFrameworkCore.Kdbndp】Kdbndp(人大金仓) 数据库组件,封装基于 Kdbndp.EntityFrameworkCore.KingbaseES 的数据访问功能的实现。

  • 【EaCloud.EntityFrameworkCore.MySql】MySql 数据库组件,封装基于 Pomelo.EntityFrameworkCore.MySql 的数据访问功能的实现。

  • 【EaCloud.EntityFrameworkCore.Oracle】Oracle 数据库组件,封装基于 Oracle.EntityFrameworkCore 的数据访问功能的实现。

  • 【EaCloud.EntityFrameworkCore.PostgreSql】PostgreSql 数据库组件,封装基于 Npgsql.EntityFrameworkCore.PostgreSQL 的数据访问功能的实现。

  • 【EaCloud.EntityFrameworkCore.SapHana】SAP HANA 数据库组件,封装基于 CData.SAPHANA.EntityFrameworkCore 的数据访问功能的实现。

  • 【EaCloud.EntityFrameworkCore.Sqlite】Sqlite 数据库组件,封装基于 Microsoft.EntityFrameworkCore.Sqlite 的数据访问功能的实现。

  • 【EaCloud.EntityFrameworkCore.SqlServer】SqlServer 数据库组件,封装基于 Microsoft.EntityFrameworkCore.SqlServer 的数据访问功能的实现。

  • 【EaCloud.Exceptionless】Exceptionless 分布式日志组件,封装基于 Exceptionless 分布式日志记录实现。

  • 【EaCloud.FastReport】FastReport组件,封装 FastReport.OpenSource 的报表处理功能。

  • 【EaCloud.File】文件处理组件,封装基于Web的文件资源管理服务,支持数据库、物理存储、数据存储服务三种存储方式,物理存储模式下支持静态资源URL映射。

  • 【EaCloud.Hangfire】Hangfire 后台任务组件,封装基于 Hangfire 后台任务的服务端实现。

  • 【EaCloud.Identity】身份认证组件,基于 AspNetCore.Identity 和 EaCloud数据仓储模型 的身份认证实现。

  • 【EaCloud.IoT】物联网组件,封装南北向连接的自动化交换通讯的可配置化聚合功能。

  • 【EaCloud.IoT.Core】物联网核心组件,封装着物联网模块基础核心对象,可独立引用实现南向驱动扩展等二次开发场景需求。

  • 【EaCloud.Log4Net】Log4Net 日志组件,封装使用 Log4Net 框架实现的日志输出功能。

  • 【EaCloud.MiniProfiler】MiniProfiler 性能监测组件,封装基于 MiniProfiler 框架实现的性能监测功能。

  • 【EaCloud.NLog】NLog 日志组件,封装使用 Nlog 框架实现的日志输出功能。

  • 【EaCloud.Redis】Redis 缓存组件,封装基于 Redis 客户端的缓存实现。

  • 【EaCloud.Report】报表组件,封装打印、看板报表、表格报表处理功能。

  • 【EaCloud.SMS】短信组件,封装阿里云、逸峰信盈通验证码、通知、推广短信处理功能。目前已完成验证码短信发送、验证的处理机制。

  • 【EaCloud.Swagger】Swagger API 文档生成组件,封装基于 Swagger 的 API 接口文档生成及调试功能。

  • 【EaCloud.Utils】工具组件,封装着框架常用的工具类。

  • 【EaCloud.Workflow】工作流引擎组件,基于BPMN模型,实现办公自动化、文件审批、业务单据、请假报销等场景的流程逻辑。

  • 【EaCloud.Pack.Audit】审计模块,包含操作审计和数据审计。

  • 【EaCloud.Pack.Authorization】权限模块,包含数据权限和功能权限。

  • 【EaCloud.Pack.File】文件处理模块,封装基于 EaCloud 文件处理组件的功能实现。

  • 【EaCloud.Pack.Identity】身份认证模块,封装基于 EaCloud 身份认证组件的功能实现。

  • 【EaCloud.Pack.IM】即时通讯模块,封装即时消息收发及消息记录管理功能。

  • 【EaCloud.Pack.IoT】物联网模块,封装南北向连接的自动化交换通讯的可配置化聚合功能的实现。

  • 【EaCloud.Pack.Menu】菜单模块,封装后台动态获取菜单模式下菜单管理功能。

  • 【EaCloud.Pack.Message】消息模块,封装公告讯息收发及记录管理功能。

  • 【EaCloud.Pack.Report】报表模块,封装基于 EaCloud 报表组件的功能实现。

  • 【EaCloud.Pack.SMS】短信模块,封装基于 EaCloud 短信组件的功能实现。

  • 【EaCloud.Pack.Workflow】工作流引擎模块,封装基于 EaCloud 工作流引擎组件的功能实现。

  • 【EaCloud.Api.Audit】审计模块API,封装基于 EaCloud 审计模块的WebApi实现。

  • 【EaCloud.Api.Authorization】权限模块API,封装基于 EaCloud 权限模块的WebApi实现。

  • 【EaCloud.Api.Baidu】百度模块API,封装基于 EaCloud 百度模块的WebApi实现。

  • 【EaCloud.Api.File】文件模块API,封装基于 EaCloud 文件模块的WebApi实现。

  • 【EaCloud.Api.Identity】身份认证模块API,封装基于 EaCloud 身份认证模块的WebApi实现。

  • 【EaCloud.Api.IM】即时通讯模块API,封装基于 EaCloud 即时通讯模块的WebApi实现。

  • 【EaCloud.Api.IoT】EaCloud 物联网模块API,封装基于 EaCloud 物联网模块的WebApi实现。

  • 【EaCloud.Api.Menu】菜单模块API,封装基于 EaCloud 菜单模块的WebApi实现。

  • 【EaCloud.Api.Message】消息模块API,封装基于 EaCloud 消息模块的WebApi实现。

  • 【EaCloud.Api.Report】报表模块API,封装基于 EaCloud 报表模块模块的WebApi实现。

  • 【EaCloud.Api.SMS】短信模块API,封装基于 EaCloud 短信模块的WebApi实现。

  • 【EaCloud.Api.System】系统公共API,封装图形验证码、模块信息等公共WebApi实现。

Nuget Packages

包名称 Nuget稳定版本 Nuget预览版本 下载数
EaCloud EaCloud EaCloud EaCloud
EaCloud.AspNetCore EaCloud.AspNetCore EaCloud.AspNetCore EaCloud.AspNetCore
EaCloud.AspNetCore.Diagnostics EaCloud.AspNetCore.Diagnostics EaCloud.AspNetCore.Diagnostics EaCloud.AspNetCore.Diagnostics
EaCloud.Authorization.Datas EaCloud.Authorization.Datas EaCloud.Authorization.Datas EaCloud.Authorization.Datas
EaCloud.Authorization.Functions EaCloud.Authorization.Functions EaCloud.Authorization.Functions EaCloud.Authorization.Functions
EaCloud.AutoMapper EaCloud.AutoMapper EaCloud.AutoMapper EaCloud.AutoMapper
EaCloud.Baidu EaCloud.Baidu EaCloud.Baidu EaCloud.Baidu
EaCloud.EntityFrameworkCore EaCloud.EntityFrameworkCore EaCloud.EntityFrameworkCore EaCloud.EntityFrameworkCore
EaCloud.EntityFrameworkCore.Allinone EaCloud.EntityFrameworkCore.Allinone EaCloud.EntityFrameworkCore.Allinone EaCloud.EntityFrameworkCore.Allinone
EaCloud.EntityFrameworkCore.Cosmos EaCloud.EntityFrameworkCore.Cosmos EaCloud.EntityFrameworkCore.Cosmos EaCloud.EntityFrameworkCore.Cosmos
EaCloud.EntityFrameworkCore.Kdbndp EaCloud.EntityFrameworkCore.Kdbndp EaCloud.EntityFrameworkCore.Kdbndp EaCloud.EntityFrameworkCore.Kdbndp
EaCloud.EntityFrameworkCore.MySql EaCloud.EntityFrameworkCore.MySql EaCloud.EntityFrameworkCore.MySql EaCloud.EntityFrameworkCore.MySql
EaCloud.EntityFrameworkCore.Oracle EaCloud.EntityFrameworkCore.Oracle EaCloud.EntityFrameworkCore.Oracle EaCloud.EntityFrameworkCore.Oracle
EaCloud.EntityFrameworkCore.PostgreSql EaCloud.EntityFrameworkCore.PostgreSql EaCloud.EntityFrameworkCore.PostgreSql EaCloud.EntityFrameworkCore.PostgreSql
EaCloud.EntityFrameworkCore.SapHana EaCloud.EntityFrameworkCore.SapHana EaCloud.EntityFrameworkCore.SapHana EaCloud.EntityFrameworkCore.SapHana
EaCloud.EntityFrameworkCore.Sqlite EaCloud.EntityFrameworkCore.Sqlite EaCloud.EntityFrameworkCore.Sqlite EaCloud.EntityFrameworkCore.Sqlite
EaCloud.EntityFrameworkCore.SqlServer EaCloud.EntityFrameworkCore.SqlServer EaCloud.EntityFrameworkCore.SqlServer EaCloud.EntityFrameworkCore.SqlServer
EaCloud.Exceptionless EaCloud.Exceptionless EaCloud.Exceptionless EaCloud.Exceptionless
EaCloud.FastReport EaCloud.FastReport EaCloud.FastReport EaCloud.FastReport
EaCloud.File EaCloud.File EaCloud.File EaCloud.File
EaCloud.Hangfire EaCloud.Hangfire EaCloud.Hangfire EaCloud.Hangfire
EaCloud.Identity EaCloud.Identity EaCloud.Identity EaCloud.Identity
EaCloud.IoT EaCloud.IoT EaCloud.IoT EaCloud.IoT
EaCloud.IoT.Core EaCloud.IoT.Core EaCloud.IoT.Core EaCloud.IoT.Core
EaCloud.Log4Net EaCloud.Log4Net EaCloud.Log4Net EaCloud.Log4Net
EaCloud.MiniProfiler EaCloud.MiniProfiler EaCloud.MiniProfiler EaCloud.MiniProfiler
EaCloud.NLog EaCloud.NLog EaCloud.NLog EaCloud.NLog
EaCloud.Redis EaCloud.Redis EaCloud.Redis EaCloud.Redis
EaCloud.Report EaCloud.Report EaCloud.Report EaCloud.Report
EaCloud.SMS EaCloud.SMS EaCloud.SMS EaCloud.SMS
EaCloud.Swagger EaCloud.Swagger EaCloud.Swagger EaCloud.Swagger
EaCloud.Utils EaCloud.Utils EaCloud.Utils EaCloud.Utils
EaCloud.Workflow EaCloud.Workflow EaCloud.Workflow EaCloud.Workflow
EaCloud.Pack.Audit EaCloud.Pack.Audit EaCloud.Pack.Audit EaCloud.Pack.Audit
EaCloud.Pack.Authorization EaCloud.Pack.Authorization EaCloud EaCloud.Pack.Authorization
EaCloud.Pack.File EaCloud.Pack.File EaCloud.Pack.File EaCloud.Pack.File
EaCloud.Pack.Identity EaCloud.Pack.Identity EaCloud.Pack.Identity EaCloud.Pack.Identity
EaCloud.Pack.IM EaCloud.Pack.IM EaCloud.Pack.IM EaCloud.Pack.IM
EaCloud.Pack.IoT EaCloud.Pack.IoT EaCloud.Pack.IoT EaCloud.Pack.IoT
EaCloud.Pack.Menu EaCloud.Pack.Menu EaCloud.Pack.Menu EaCloud.Pack.Menu
EaCloud.Pack.Message EaCloud.Pack.Message EaCloud.Pack.Message EaCloud.Pack.Message
EaCloud.Pack.Report EaCloud.Pack.Report EaCloud.Pack.Report EaCloud.Pack.Report
EaCloud.Pack.SMS EaCloud.Pack.SMS EaCloud.Pack.SMS EaCloud.Pack.SMS
EaCloud.Pack.Workflow EaCloud.Pack.Workflow EaCloud.Pack.Workflow EaCloud.Pack.Workflow
EaCloud.Api.Audit EaCloud.Api.Audit EaCloud.Api.Audit EaCloud.Api.Audit
EaCloud.Api.Authorization EaCloud.Api.Authorization EaCloud.Api.Authorization EaCloud.Api.Authorization
EaCloud.Api.Baidu EaCloud.Api.Baidu EaCloud.Api.Baidu EaCloud.Api.Baidu
EaCloud.Api.File EaCloud.Api.File EaCloud.Api.File EaCloud
EaCloud.Api.Identity EaCloud.Api.Identity EaCloud.Api.Identity EaCloud.Api.Identity
EaCloud.Api.IM EaCloud.Api.IM EaCloud.Api.IM EaCloud.Api.IM
EaCloud.Api.IoT EaCloud.Api.IoT EaCloud.Api.IoT EaCloud.Api.IoT
EaCloud.Api.Menu EaCloud.Api.Menu EaCloud.Api.Menu EaCloud.Api.Menu
EaCloud.Api.Message EaCloud.Api.Message EaCloud.Api.Message EaCloud.Api.Message
EaCloud.Api.Report EaCloud.Api.Report EaCloud.Api.Report EaCloud.Api.Report
EaCloud.Api.SMS EaCloud.Api.SMS EaCloud.Api.SMS EaCloud.Api.SMS
EaCloud.Api.System EaCloud.Api.System EaCloud.Api.System EaCloud.Api.System

EaCloud特性

1. 模块化的组件设计

框架设计了一个模块(Pack)的系统,所有实现了模块基类(PackBase)的类都视为一个独立的模块,一个模块可以独立添加服务(AddServices),并可在初始化时应用服务(UsePack)进行模块初始化。

2. 自动化的依赖注入机制

框架定义了ISingletonDependencyIScopeDependencyITransientDependency三个空接口对应DependencyInjection中的三种服务生命周期,系统初始化时,通过反射检索程序集的方式,检索出所有服务类型(ServiceType)与服务实现(ImplementationType)及生命周期类型(ServiceLifetime)的相关数据,对依赖注入的ServiceCollection进行全自动初始化。

3. UnitOfWork + Repository 模式,EFCore上下文动态构建设计

  • 实体数据模块使用了UnitOfWork + Repository的模式来设计,设计了一个泛型的实体仓储接口IRepository<TEntity,TKey>,避免每个实体都需实现一个仓储的繁琐操作。设计了IUnitOfWork接口来管理事务,通过UnitOfWork模式管理DbContext的创建,使同上下文类型同数据库连接字符串的上下文使用相同DbConnection对象来创建,达到多上下文的事务同步能力。

  • 基于API的ActionFilterUnitOfWorkAttribute AOP 事务自动提交,业务中不再需要关心事务的生命周期。

  • 系统初始化时,通过反射检索程序集的方式,检索出各个实体与上下文的映射关系,向上下文中动态添加实体类来构建上下文类型,以达到上下文类型与业务实体解耦的目的。通过统一基类EntityTypeConfigurationBase<TEntity, TKey>的FluentAPI实体映射,自由配置每个实体与数据库映射的每一个细节。

4. 基于AspNetCore的Identity的身份认证系统设计

  • 使用AspNetCore原生的用户身份认证框架,身份认证相关操作统一使用UserManager<TUser>RoleManager<TRole>两个入口,保持了原生Identity的体系强大性与功能完整性。

  • 重新设计了用户存储UserStore和角色存储RoleStore,使用框架内设计的IRepository<TEntity,TKey>数据仓储接口来实现对数据的仓储操作,使Identity身份认证系统与框架完美结合,避免了使用官方的Microsoft.AspNetCore.Identity.EntityFrameworkCore造成多个上下文或者被强制使用Identity上下文作为系统数据上下文来实现业务造成的尴尬。

  • 设计了组织机构存储OrganizationStore,使用框架内设计的IRepository<TEntity,TKey>数据仓储接口来实现对数据的仓储操作,使Identity身份认证系统与框架组织机构处理完美结合,同时支持更换登录组织后重新发放令牌,并强制原令牌过期机制。 image

5. 强大的功能权限与数据权限的授权体系设计

  • 从底层开始,自动收集了系统的所有业务点(IFunction)和数据实体(IEntityInfo),用于对系统的功能权限、数据权限、数据缓存、操作审计 等实用功能提供数据支持。

  • 功能点Function与API的Area/Controller/Action一一对应,是功能权限的最小验证单位,基于功能点,可以配置:

    • 功能访问类型(匿名访问、登录访问、限定角色访问)
    • 功能的数据缓存时间及缓存过期方式(绝对过期、相对过期)
    • 是否开启操作审计(XX用户XX时间做了XX操作)
    • 是否开启数据审计(操作引起的数据变化详情(新增、更新、删除))

    image

  • 数据实体EntityInfo与数据库中的各个数据实体一一对应,基于数据实体,可以配置:

    • 是否开启数据审计,与Function上的同配置级别不同,如果指定实体未开放审计,则不审计当前实体。

    image

  • 设计了一个树形结构的业务模块体系(Module),对应着后端向前端开放的操作点(菜单/按钮),一个模块可由一个或多个功能点构成,模块是对外开放的特殊功能点,是进行角色/用户功能授权的单位。把一个模块授权给角色,角色即拥有了一个或多个功能点的操作权限。

image

  • 功能权限授权流程

    • [自动] 创建APIC的各个Area/Controller/Action的功能点Function信息,存储到数据库
    • [自动] 创建树形模块Module信息,并创建模块与功能点(一个或多个)的分配关系,存储到数据库
    • 将模块Module分配给角色Role
    • 将角色Role分配给用户User
    • 可将模块Module分配给用户User,解决特权问题
    • 这样用户即可根据拥有的角色,自动拥有模块对应着的所有功能点的功能权限

    image

  • 功能权限验证流程

    • 系统初始化时,根据每个角色Role分配到的模块Module,自动初始化每个 角色 Role - Function[] 的权限对应关系并缓存
    • 游客进入系统时,自动请求所有可匿名访问FunctionAccessType.Anonymouse的模块信息并缓存到浏览器,浏览器根据这个缓存的模块集合,对前端页面的各个操作点(菜单/按钮)进行是否隐藏/禁用的状态控制
    • 注册用户登录系统时,自动请求所有可执行(包括匿名的FunctionAccessType.Anonymouse、登录的FunctionAccessType.Logined、指定角色的FunctionAccessType.RoleLimit)的模块信息并缓存到浏览器,浏览器根据这个缓存的模块集合,对前端页面的各个操作点(菜单/按钮)进行是否隐藏/禁用的状态控制
    • 用户User执行一个功能点Function时,验证流程如下:
      • 功能点不存在时,返回404
      • 功能点被锁定时,返回423
      • 功能点可访问性为匿名FunctionAccessType.Anonymouse验证通过
      • 功能点可访问性为需要登录FunctionAccessType.Logined时,用户未登录,返回401,已登录则验证通过
      • 功能点可访问性为需要登录FunctionAccessType.RoleLimit时,流程如下:
        • 用户未登录,返回401
        • 逐个验证用户拥有的角色Role,根据角色从缓存中取出Role-Function[]缓存项,Function[]包含要验证的功能点时,验证通过
        • 由分配给用户的模块Module对应的功能点,获取到User-Function[](并缓存),Function[]包含要验证的功能点时,验证通过
        • 验证未通过,返回403
  • 数据权限授权流程

    • 基于 角色Role-实体EntityInfo 的数据权限设计,通过配置实现 XX角色是否有权访问XX实体数据(的XX属性)

    image

  • 数据权限验证流程

    • 系统初始化时,将所有角色-实体的数据筛选规则缓存到内存中
    • 进行数据查询的时候,根据当前用户的所有角色 Role和要查询的实体 EntityInfo,查找出所有配置的数据筛选规则FilterGroup,转换为数据查询表达式Expression<Func<TEntity,bool>>,各个角色的表达式之间使用Or逻辑进行组合
    • 将以上生成的数据权限数据查询表达式,使用And逻辑组合到用户的提交的查询条件生成的表达式中,得到最终的数据查询表达式,提交到数据库中进行数据查询,从而获得数据权限限制下的合法数据

    image

6. 灵活统一的数据查询筛选规则设计

数据查询筛选规则组成为 条件组FilterGroup和条件FilterRule,一个条件组 FilterGroup 包含 一个或多个条件 FilterRule 和 一个或多个 条件组FilterGroup,这样就实现了条件组和条件的无限嵌套,能满足绝大多数数据筛选规则的组装需要,如下图:

image

7. 集成 Swagger 后端API文档系统

EaCloud 快速启动模板的开发模式,集成了 Swagger API 文档生成组件,方便前后端分离的开发模式中前后端开发人员的数据接口对接工作。基于Swagger的工作原理,API的输入输出都需使用强类型的数据类型,Swagger才能发挥更好的作用,而EaCloud框架通过AutoMapperProjectTo对业务实体到输出DTOIOutputDto提供了自动映射功能,能有效减轻后端开发中数据对象属性映射的工作量。

image

8. 集成 Hangfire 后端任务管理系统

EaCloud 快速开发平台集成了 Hangfire 任务管理组件,方便后端针对任务自动执行的需求。基于Hangfire的工作原理,支持 列队任务、延时任务、后继任务、定时任务等模式,基于服务注入的模式,任务执行逻辑可以调用系统依赖模块的所有功能,更灵活的实现业务场景。

image

EaCloud快速启动

EaCloud框架制作了一个基于dotnet cli命令行工具的快速启动模板,下面演示如何来使用这个模板快速创建一个基于EaCloud框架的初始化项目。

1. 安装最新版本 .NET 7.0 sdk 及 runtime

EaCloud NuGet Badge 使用了 .NET 7.0.NET 7.0 sdk 需要安装到版本 >=v7.0.100.NET 7.0 runtime 需要安装到版本 >=v7.0.0

2. 安装EaCloud的dotnet new项目模板

在任意空白目录,打开 cmdpowershell Shift+空白处鼠标右击+在此处打开Powershell窗口(S) 命令行窗口,执行命令

dotnet new install EaCloud.Template

执行后,将能看到EaCloud.Template命令已安装到列表中

image

3. 执行EaCloud.Template命令,获取项目一键项目安装脚本

dotnet new EaCloud.Template

执行后,将得到一个名为eacloud.cmd的批处理脚本文件

image

4. 运行脚本文件,生成项目初始化代码

直接执行eacloud.cmd脚本代码,将会提示 请输入项目名称,推荐形如 “公司.项目”的模式:,此名称将用作后端解决方案名称、工程名称起始部分、代码中的namespace起始部分。

image

例如输入SanQing.Test,然后根据提示步骤操作。当所有确认选项选择Y时,将生成如下结构:

image

5. 用 Visual Studio 打开后端解决方案

注:由于 EaCloud 基于最新的 .NET 7.0 框架,IDE工具需要安装 Visual Studio 2022 及以上版本,否则有可能会出现未知的异常。

打开解决方案后,各个工程之间的引用关系已配置好,eacloud框架的类库已引用 nuget.org 上的相应版本,并将自动还原好。项目结构如图所示:

image

5.1 项目自定义Pack代码结构说明:

  • Core: 业务核心工程,顶层文件夹以业务模块内聚,每个文件夹按职责划分文件夹,通常可包含传输对象Dtos、实体类型Entities、事件处理Events等,业务接口IXXXContract与业务实现IXXXService放在外边,如果文件数量多的话也可以建文件夹存放。
  • EntityConfiguration: EFCore实体映射工程,用于配置各个业务实体映射到数据库的映射细节。文件夹也推荐按模块内聚。
  • Api: 网站的Hosting项目,按常规方式使用即可
注:其余项目参见各自项目内的 README.md 文件。

5.2 项目启动配置

  • 确认并设置services目录下XXX.Svc项目为启动项目,XXX.SvcXXX为运行生成项目脚本文件时输入的项目名称。
  • 按实际环境修改启动项目下配置文件(Debug:appsettings.Development.json、Release:appsettings.json)中的EaCloud:DbContexts:[MySql|Oracle|PostgreSql|Sqlite|SqlServer]中的配置信息,ConnectionString为数据库连接串,AutoMigrationEnabled为是否开启自动迁移。
  • EaCloud后端ORM采用了微软的EF Core框架,默认Code First模式,需要在nuget 控制台执行Add-Migration [-Name] <String>命令生成迁移代码文件,示例如下:
add-migration -Name InitialCreate
注:更多 EF Core 配置说明Startups\README.EntityFrameworkCore.Migration.md或访问 Entity Framework Core
  • 若未开启AutoMigrationEnabled的自动迁移功能,还需要在nuget 控制台手动执行迁移操作,命令如下:
update-database
  • 配置好后,即可正常启动端口号为38062的项目,启动后追加路由 “/swagger(名称可配置)”将进入Swagger的后端Api接口的文档页。
注:后端.NET Core项目支持自宿主模式启动,当采用自宿主模式时,需要正确设置配置文件(Debug:appsettings.Development.json、Release:appsettings.json)下EaCloud:Host节点。
另附上.Net Core部署至Windows服务教程:

注:后端项目参考借鉴了 OSharp 开源项目,详情链接 https://github.com/dotnetcore/osharp

6. Vue的前端项目启动

前端项目使用了Vue-Vben-AdminAnt-Design-Vue作为UI进行开发的,需要熟悉NodeJSVue3.0ViteAnt-Design-VueTypeScript等主流技术。 Vben Admin 官方文档Ant Design Vue 官方文档

6.1 前端环境准备

本地环境需要安装 GitNodeJSpnpm(官方目前使用方式) 或者 Yarn

注:1、Node.js 版本要求16.x以上。2、Pnpm 版本要求6.x以上。3、Yarn 必须使用1.x,否则依赖可能安装不上。
  • pnpm常用命令:

    • 安装
    # 全局安装最新版本
    npm i -g pnpm
    # 查看版本
    pnpm --version
    • 安装第三方模块
    # 安装默认添加至 dependencies
    pnpm install [package]
    # 安装并添加至 devDependencies
    pnpm install [package] -D
    # 安装并添加至 dependencies
    pnpm install [package] -S
    • 更新第三方模块
    pnpm update
    • 卸载第三方模块
    pnpm uninstall [package]
  • yarn常用命令:

    • 安装
    # 全局安装最新版本
    npm install -g yarn
    # 查看版本
    yarn --version
    • 安装第三方模块
    # 在当前的项目中添加一个依赖包,会自动更新到package.json和yarn.lock文件中
    yarn add [package]
    # 安装指定版本,这里指的是主要版本,如果需要精确到小版本,使用-E参数
    yarn add [package]@[version]
    # 安装某个tag(比如beta,next或者latest)
    yarn add [package]@[tag]
    # 不指定依赖类型默认安装到dependencies里,你也可以指定依赖类型:
    yarn add --dev/-D # 加到 devDependencies
    yarn add --peer/-P # 加到 peerDependencies
    yarn add --optional/-O # 加到 optionalDependencies
    • 更新第三方模块
    yarn upgrade [package]
    • 卸载第三方模块
    yarn remove [package]

6.2 前端工具配置

如果您使用的 IDE 是 Visual Studio Code(推荐,前端最好用的IDE) 的话,可以安装以下工具来提高开发效率及代码格式化:

6.2.1 建议安装插件
6.2.2 选装插件
6.2.3 摸鱼插件
  • 小霸王 - 基于vscode的nes游戏插件。通过劳逸结合,提升开发效率。请务必在闲暇时间使用本插件,若是上班摸鱼被发现,后果自负~
注:注意存放代码的目录及所有父级目录不能存在中文、韩文、日文以及空格,否则安装依赖后启动会出错。

6.3 使用 VS Code 打开Vue前端项目

  • 定位到项目的目录front-end\background-gui\vben-admin,在空白处点右键,使用 VS Code 打开项目,可看到如下结构:

image

注:项目结构中功能代码存放于 src 目录。其中 api 为与后端交互的接口函数目录,assets 为本地资源目录,components 为组件目录,enums 为枚举目录,locales 为国际化多语言目录,router 为页面路由配置目录,views 为页面功能目录,其余的请查看具体目录下的代码功能。
  • Ctrl+Shift+` 调出VS Code的终端,按步骤执行以下命令:

    • 安装依赖
    # pnpm方式:
    pnpm install
    # yarn方式:
    yarn 
    # OR
    yarn install 
    • 依赖安装完成后,运行项目
    # pnpm方式:
    pnpm dev
    # yarn方式:
    yarn dev

    image

    • 构建/发布程序
    # pnpm方式:
    pnpm build
    # yarn方式:
    yarn build 

至此,项目启动完成,最终效果如下图所示:

image image

注:前端项目使用了 Vben Admin 作为前端框架,更多资料详见 官方文档。 附:nginx下载链接

7. 移动端项目启动

移动端项目使用了DClouduni-app作为框架进行开发的,IDE工具为HBuilder X,需要熟悉NodeJSVueJavaScript等主流技术。 DCloud 官网uni-app 官方文档HBuilder X 官方文档

7.1 环境准备

本地环境需要安装 GitNodeJS

注:参见 6 Vue的前端项目启动。

7.2 开发工具(IDE)配置

移动端项目使用的 IDE 是 HBuilder X(推荐,其他IDE请自行百度)。

注:注意存放代码的目录及所有父级目录不能存在中文、韩文、日文以及空格,否则可能存在未知的问题。

7.3 使用 HBuilder X 打开移动端项目

  • 打开 HBuilder X 程序,打开或导入项目app\pda,可看到如下结构:

image

注:项目结构中,apis 为与后端交互的接口函数目录,config 为配置目录,static 为静态资源目录,enums 为枚举目录,locales 为国际化多语言目录,pages.json 为页面路由配置文件,pages 为页面功能目录,其余的请查看具体目录下的代码功能。
  • 若项目结构中不存在node_modules目录,请检查并删除package-lock.json或者pnpm-lock.yaml文件后执行以下命令:

    • 安装依赖
    # npm方式:
    npm install
    # pnpm方式:
    pnpm install
    # yarn方式:
    yarn 
    # OR
    yarn install 
  • 运行项目

image

  • 发行/打包程序

image

至此,移动端项目启动完成,最终效果如下图所示:

image image

注:移动端项目使用了 uni app 作为开发框架,更多资料详见 官方文档

EaCloud集成功能

EaCloud框架现已集成基于FastReport开源的自定义打印功能、以及IoT平台、大屏看板平台等功能,具体如下所示:

1. 自定义打印功能

image image image

2. IoT物联网平台

image image image image image image

注:IoT物联网平台参考借鉴了 IoTGateway 开源项目,详情链接 http://iotgateway.net

3. 报表数据链设置

image

4. 大屏看板平台

image image image image

注:大屏看板平台参考借鉴了 GoView 开源项目,详情链接 https://www.mtruning.club

EaCloud结构概述

截止到目前,EaCloud 框架的计划中的功能点均已得到较高水准的实现,结构概述如下所示:

  • 易云开发平台(EaCloud Framework)
    • EaCloud
      • 添加常用Utility辅助工具类
      • 添加框架配置Options定义
      • 定义Entity数据访问相关接口
      • 定义依赖注入模块相关接口
      • 定义并实现EventBus事件总线的设计
      • 定义Mapper对象映射模块相关接口
      • 定义实体信息EntityInfo及初始化,用于给各个实体进行数据日志审计配置及数据权限设计
      • 定义功能点信息Function及初始化,用于收集各个业务功能点(API的Action),用于对功能进行缓存配置、操作日志审计、功能权限设计
      • 定义实体信息Module及初始化,用于记录系统模块的树形结构信息
      • 定义Audit审计功能,用于处理需要操作及数据记录的审计信息
      • 定义DistributedCache分布式缓存的功能实现
      • 定义数据库Function、Procedure、Trigger、View信息及初始化,用于自动管理数据库实体表之外的数据库对象
      • 定义Localize本地化处理功能,实现可基于Http请求的AcceptLanguages属性获取或设置多语言消息设计
      • 定义EmailSender邮件发送相关接口及默认实现
      • 定义Permissions权限模块的相关接口
      • 实现框架依赖注入服务启动入口,调用各个功能模块(Pack)添加各模块的服务映射
      • 实现ServiceLocator服务定位模式的依赖注入对象的解析
      • 实现雪花算法、自增算法、有序GUID算法等非数据库处理的主键生成逻辑
    • EaCloud.AspNetCore
      • AspNet
        • 实现框架启动入口app.UseEaCloud(),调用Pack模块管理器EaCloudPackManager启动各个功能模块(PackBase)
        • 实现基于当前请求的ServiceLocator的Scoped对象的解析
        • 实现Localize本地化LocalizeHandler本地化处理程序的实例化,实现后方能正常使用本地化功能
        • 实现图形验证码的相关处理功能
        • 实现JSON请求的404处理中间件
        • 实现JSON请求的异常信息到JSON操作结果与异常日志记录中间件
      • MVC - [x] 添加Api专用控制器基类ApiControllerBase,AreaApiControllerBase,ControllerBase - [x] 实现MVC功能点处理器 - [x] 实现MVC业务模块处理器 - [x] 定义Cors跨源资源共享服务 - [x] 定义Kestrel宿主配置处理,可通过在启动程序Program.cs --> CreateHostBuilder 方法中设置 Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults --> webBuilder.ConfigureKestrel 中 加入 options.SetHost(); 实现自宿主的相关参数设置 - [x] 实现基于MVC的功能权限AOP拦截验证 - [x] 实现基于MVC的事务提交AOP拦截提交
      • SignalR - [x] 实现基于SignalR Hub处理基本功能(连接、加入组、离开、发送消息、用户身份、缓存、相关事件)
    • EaCloud.AspNetCore.Diagnostics
      • 实现AspNetCore性能诊断功能的封装
    • EaCloud.Authorization.Datas
      • 实现角色-实体用户-实体的数据权限配置
      • 实现角色-实体用户-实体的数据权限过滤
    • EaCloud.Authorization.Functions
      • 实现功能权限各个业务实体的数据存储
      • 实现在系统初始化时,遍历反射程序集,自动初始化功能点、数据实体、业务模块等信息并持久化到数据库
      • 实现系统初始化时,将功能点,数据实体,角色功能权限等信息缓存到内存中
      • 实现角色-功能点用户-功能点的功能权限验证
    • EaCloud.AutoMapper
      • 不同的映射类型,通过实现Profile来实现映射注册
      • 实现通过遍历程序集,查找实现了IMapTuple接口的Profile来自动注册映射策略
      • 定义MapToAttributeMapFromAttribute类型,用以标注Mapping的Source与Target类型,使用时在要映射的类型上标注如[MapTo(typeof(TTarget))][MapFrom(typeof(TSource))]特性,框架初始化时自动查找相应的类型进行CreateMap映射注册
    • EaCloud.Baidu
      • Map
        • 实现与百度地图的相关接口交互
    • EaCloud.EntityFrameworkCore
      • 实现运行时上下文类型初始化及自动加载相关实体类型的功能
      • 实现Repository仓储的数据存储功能
      • 实现UnitOfWork的多上下文管理及同DbConnection的上下文事务同步
      • 实现主从结构的数据读写分离
      • 实现可直接执行SQL语句,通过SQL语句返回DataTable或指定实体数据
    • EaCloud.EntityFrameworkCore.Allinone
      • 实现 Cosmos(Azure Cosmos DB 的 SQL API)、Kdbndp(人大金仓)、MySql、Oracle、PostgreSql、Sqlite、SqlServer 类型数据访问功能
    • EaCloud.EntityFrameworkCore.Cosmos
      • 实现 Azure Cosmos DB 的 SQL API 数据访问功能
    • EaCloud.EntityFrameworkCore.Kdbndp
      • 实现EntityFrameworkCore的Kdbndp(人大金仓)数据访问功能
    • EaCloud.EntityFrameworkCore.MySql
      • 实现EntityFrameworkCore的MySql数据访问功能
    • EaCloud.EntityFrameworkCore.Oracle
      • 实现EntityFrameworkCore的Oracle数据访问功能
    • EaCloud.EntityFrameworkCore.PostgreSql
      • 实现EntityFrameworkCore的PostgreSql数据访问功能
    • EaCloud.EntityFrameworkCore.SapHana
      • 实现EntityFrameworkCore的SAP HANA数据访问功能
    • EaCloud.EntityFrameworkCore.Sqlite
      • 实现EntityFrameworkCore的Sqlite数据访问功能
    • EaCloud.EntityFrameworkCore.SqlServer
      • 实现EntityFrameworkCore的SqlServer数据访问功能
    • EaCloud.Exceptionless
      • 实现基于Exceptionless的分布式日志记录
    • EaCloud.FastReport
      • 实现基于 FastReport.OpenSource 的报表处理功能
    • EaCloud.File
      • 实现基于Web的文件资源管理服务,实现文件的上传、下载、删除、版本管理功能
      • 实现数据库存储、物理存储、文件存储服务三种存储方式功能处理
      • 实现物理存储模式下静态资源可通过URL映射
    • EaCloud.Hangfire
      • 实现基于Hangfire的后台定时任务
    • EaCloud.Identity
      • 身份认证Authentication
        • 实现用户Claims提供器IUserClaimsProvider
        • Cookie
          • 实现Cookie登录,并刷新在线用户信息
        • JwtBearer
          • 实现 Jwt Token 的构建功能
          • 实现 Jwt Token 的刷新机制
        • OAuth2
          • 实现 微信钉钉抖音QQMicrosoftGithub 三方登录功能
      • 身份标识Identity
        • 实现用户数据管理功能,以及 用户角色用户组织机构 的绑定管理
        • 实现角色数据管理功能,以及 用户角色角色组织机构 的绑定管理
        • 实现组织机构数据树形管理功能,实现用户登录组织及部门,可用于后续的数据权限处理
        • 重写UserStore,RoleStore,使用现有IRepository进行数据存储
        • 实现第三方OAuth2认证系统的整合
        • 在线用户信息缓存系统,实现用户信息刷新
    • EaCloud.IoT
      • 实现物联网南北向连接的自动化交换通讯的可配置化聚合功能
    • EaCloud.IoT.Core
      • 实现物联网模块基础核心可独立引用实现南向驱动扩展等二次开发场景需求
    • EaCloud.Log4Net
      • 实现基于Log4Net的日志处理
    • EaCloud.MiniProfiler
      • 实现基于MiniProfiler的性能监测
    • EaCloud.NLog
      • 实现基于NLog的日志处理
    • EaCloud.Redis
      • 实现基于Redis客户端的缓存处理
    • EaCloud.Report
      • 实现打印、看板报表、表格报表处理功能。
    • EaCloud.SMS
      • 实现验证码短信管理功能
      • 实现基于阿里云平台的短信发送、签名管理、模板管理
      • 实现基于逸峰信盈通平台的短信发送、短信查询
    • EaCloud.Swagger
      • 实现基于Swagger的API自动生成同步的在线文档功能
    • EaCloud.Workflow
      • 工作流组件,基于BPMN模型,实现办公自动化、文件审批、业务单据、请假报销等场景的流程逻辑

交流

 QQ  WeChat
QQ群号:863605868 微信号:SeonHu
成就
0
Star
0
Fork
成员(2)
sunzack
1619496 seonsoft 1617928772
Seon.Hu

搜索帮助

14c37bed 8189591 565d56ea 8189591