龙空技术网

NetCore多租户开源项目,快速后台开发企业框架,赚钱就靠她了

编程乐趣 4566

前言:

此时朋友们对“net项目架构”大概比较重视,姐妹们都想要分析一些“net项目架构”的相关资讯。那么小编也在网络上搜集了一些关于“net项目架构””的相关知识,希望各位老铁们能喜欢,看官们一起来学习一下吧!

我是编程乐趣,一个10年.Net开发经验老程序员,点击右上方“关注”,每天为你分享开源项目和编程知识。

今天给大家推荐一个开源项目,基于.NetCore开发的、多租户的企业开发框架。

项目简介

这是一个基于.Net和Layui、基于多数据库的多租户,敏捷开发优选框架。系统自带权限功能、数据权限、系统日志、流程表单设计、内容管理、以及系统UI组件,系统基础功能非常完善,让开发者更注重业务的开发。

框架支持代码生成、表单设计,可以极大地提升开发效率。

采用都是目前主流的技术,该项目非常适合用于Crm、OA、ERP、CMS、WMS、BI等管理型的系统。

技术架构

1、跨平台:这是基于.Net Core开发的系统,可以部署在Docker, Windows, Linux, Mac。

2、数据库支持:MySQL、Sqlserver。

3、技术栈:ASP.NET 6.0、WEB API、QuartZ、SqlSugar、Reids、RabbitMq、Jaina、Swagger、AutoFac、LayUI。

4、开发环境:Visual Studio 2022。

项目结构

系统功能

1、首页:快捷入口、数据统计、报表、系统公告

2、单位组织:系统公告、租户设置、机构管理、数据权限、角色管理、岗位管理、用户管理

3、系统管理:系统设置、系统菜单、代码生成、数据字典、区域管理、表单设计、流程设计、条码规则、打印模块、条码生成记录

4、系统安全:系统日志、操作日志、访问控制、定时任务、服务器监控

5、流程中心:我的流程、待处理流程、已处理流程

6、文件中心:文件管理

7、信息中心:通知管理

8、内容管理:新闻类别、新闻管理

9、订单管理:订单信息

10、组件管理:图表列表、图标选择、颜色选择、下拉选择、文件上传、富文本编辑器、省市县区选择器、卡片表格

11、大屏幕报表

代码生成器

1、选择表

2、选择列表展示字段、搜索字段、排序字段、页面样式等配置

3、表单页面字段设置

4、代码生成

部分代码预览

实体

using System;using System.ComponentModel.DataAnnotations;using SqlSugar;namespace WaterCloud.Domain.GeneralManage{/// <summary>/// 创 建:超级管理员/// 日 期:2022-11-28 20:01/// 描 述:Articlecategory实体类/// </summary>    [SugarTable("cms_articlecategory")]public class ArticlecategoryEntity : IEntity<ArticlecategoryEntity>,ICreationAudited,IModificationAudited,IDeleteAudited    {/// <summary>/// /// </summary>        [SugarColumn(ColumnName="F_Id", ColumnDescription = "",ColumnDataType = "text(50)",IsPrimaryKey = true)]public string F_Id { get; set; }/// <summary>/// /// </summary>        [SugarColumn(ColumnName="F_FullName", ColumnDescription = "",ColumnDataType = "text(100)", IsNullable = true)]public string F_FullName { get; set; }/// <summary>/// /// </summary>        [SugarColumn(ColumnName="F_ParentId", ColumnDescription = "",ColumnDataType = "text(50)", IsNullable = true)]public string F_ParentId { get; set; }/// <summary>/// /// </summary>        [SugarColumn(ColumnName="F_SortCode", ColumnDescription = "",ColumnDataType = "integer")]public int F_SortCode { get; set; }/// <summary>/// /// </summary>        [SugarColumn(ColumnName="F_Description", ColumnDescription = "",ColumnDataType = "text", IsNullable = true)]public string F_Description { get; set; }/// <summary>/// /// </summary>        [SugarColumn(ColumnName="F_LinkUrl", ColumnDescription = "",ColumnDataType = "text(255)", IsNullable = true)]public string F_LinkUrl { get; set; }/// <summary>/// /// </summary>        [SugarColumn(ColumnName="F_ImgUrl", ColumnDescription = "",ColumnDataType = "text(255)", IsNullable = true)]public string F_ImgUrl { get; set; }/// <summary>/// /// </summary>        [SugarColumn(ColumnName="F_SeoTitle", ColumnDescription = "",ColumnDataType = "text(255)", IsNullable = true)]public string F_SeoTitle { get; set; }/// <summary>/// /// </summary>        [SugarColumn(ColumnName="F_SeoKeywords", ColumnDescription = "",ColumnDataType = "text(255)", IsNullable = true)]public string F_SeoKeywords { get; set; }/// <summary>/// /// </summary>        [SugarColumn(ColumnName="F_SeoDescription", ColumnDescription = "",ColumnDataType = "text(255)", IsNullable = true)]public string F_SeoDescription { get; set; }/// <summary>/// /// </summary>        [SugarColumn(ColumnName="F_IsHot", ColumnDescription = "",ColumnDataType = "integer", IsNullable = true)]public int? F_IsHot { get; set; }/// <summary>/// /// </summary>        [SugarColumn(ColumnName="F_EnabledMark", ColumnDescription = "",ColumnDataType = "integer", IsNullable = true)]public int? F_EnabledMark { get; set; }/// <summary>/// /// </summary>        [SugarColumn(ColumnName="F_DeleteMark", ColumnDescription = "",ColumnDataType = "integer", IsNullable = true)]public int? F_DeleteMark { get; set; }/// <summary>/// /// </summary>        [SugarColumn(ColumnName="F_CreatorTime", ColumnDescription = "",ColumnDataType = "text", IsNullable = true)]public string F_CreatorTime { get; set; }/// <summary>/// /// </summary>        [SugarColumn(ColumnName="F_CreatorUserId", ColumnDescription = "",ColumnDataType = "text(50)", IsNullable = true)]public string F_CreatorUserId { get; set; }/// <summary>/// /// </summary>        [SugarColumn(ColumnName="F_LastModifyTime", ColumnDescription = "",ColumnDataType = "text", IsNullable = true)]public string F_LastModifyTime { get; set; }/// <summary>/// /// </summary>        [SugarColumn(ColumnName="F_LastModifyUserId", ColumnDescription = "",ColumnDataType = "text(50)", IsNullable = true)]public string F_LastModifyUserId { get; set; }/// <summary>/// /// </summary>        [SugarColumn(ColumnName="F_DeleteTime", ColumnDescription = "",ColumnDataType = "text", IsNullable = true)]public string F_DeleteTime { get; set; }/// <summary>/// /// </summary>        [SugarColumn(ColumnName="F_DeleteUserId", ColumnDescription = "",ColumnDataType = "text(50)", IsNullable = true)]public string F_DeleteUserId { get; set; }    }}

控制器

using System;using System.Linq;using System.Threading.Tasks;using System.Collections.Generic;using Microsoft.AspNetCore.Mvc;using WaterCloud.Code;using WaterCloud.Domain.GeneralManage;using WaterCloud.Service;using Microsoft.AspNetCore.Authorization;using WaterCloud.Service.GeneralManage;namespace WaterCloud.Web.Areas.GeneralManage.Controllers{    /// <summary>    /// 创 建:超级管理员    /// 日 期:2022-11-28 20:26    /// 描 述:Articlecategory控制器类    /// </summary>    [Area("GeneralManage")]    public class ArticlecategoryController :  BaseController    {        public ArticlecategoryService _service {get;set;}        #region 获取数据        [HandlerAjaxOnly]        [IgnoreAntiforgeryToken]        public async Task<ActionResult> GetGridJson(SoulPage<ArticlecategoryEntity> pagination, string keyword)        {            if (string.IsNullOrEmpty(pagination.field))            {                pagination.field = "F_Id";                pagination.order = "desc";            }            var data = await _service.GetLookList(pagination,keyword);            return Content(pagination.setData(data).ToJson());        }        [HttpGet]        [HandlerAjaxOnly]        public async Task<ActionResult> GetListJson(string keyword)        {            var data = await _service.GetList(keyword);            return Content(data.ToJson());        }        [HttpGet]        [HandlerAjaxOnly]        public async Task<ActionResult> GetFormJson(string keyValue)        {            var data = await _service.GetLookForm(keyValue);            return Content(data.ToJson());        }        #endregion        #region 提交数据        [HttpPost]        [HandlerAjaxOnly]        public async Task<ActionResult> SubmitForm(ArticlecategoryEntity entity, string keyValue)        {            try            {                await _service.SubmitForm(entity, keyValue);                return await Success("操作成功。", "", keyValue);            }            catch (Exception ex)            {                return await Error(ex.Message, "", keyValue);            }        }        [HttpPost]        [HandlerAjaxOnly]        [HandlerAuthorize]        public async Task<ActionResult> DeleteForm(string keyValue)        {            try            {                await _service.DeleteForm(keyValue);                return await Success("操作成功。", "", keyValue, DbLogType.Delete);            }            catch (Exception ex)            {                return await Error(ex.Message, "", keyValue, DbLogType.Delete);            }        }        #endregion    }}

部分功能截图

系统公告

租户设置

机构管理

数据权限

系统菜单

区域管理

表单设计

流程设计

系统日志

操作日志

访问控制

定时任务

服务器监控

图表列表

通知管理

大屏幕报表

项目地址

我是编程乐趣,一个10年.Net开发经验老程序员,专注开源项目和编程知识分享。

私信回复:【888】,领取.Net视频教程。

- End -

推荐阅读

一个基于.Net Core开源个人博客网站 Net5开发的视频监控管理系统 推荐基于.NET 6.0开发的开源访客系统 基于Asp.Net Mvc开发的个人博客系统 盘点10个.NetCore实用的开源框架项目 盘点5个.NetCore + Vue 开源项目

标签: #net项目架构