# EasyJob **Repository Path**: dyx88168/EasyJob ## Basic Information - **Project Name**: EasyJob - **Description**: EasyJob 让所有的Job都变得简单。 - **Primary Language**: C# - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2026-05-07 - **Last Updated**: 2026-07-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README [English](README.en.md) | 中文
# EasyJob **基于 ASP.NET Core + Vue.js 的分布式任务调度与 ETL 数据同步平台** [![.NET](https://img.shields.io/badge/.NET-10.0-512BD4?logo=dotnet)](https://dotnet.microsoft.com/) [![Vue.js](https://img.shields.io/badge/Vue.js-3.5-4FC08D?logo=vuedotjs)](https://vuejs.org/) [![TypeScript](https://img.shields.io/badge/TypeScript-5.8-3178C6?logo=typescript)](https://www.typescriptlang.org/) [![Vite](https://img.shields.io/badge/Vite-6.3-646CFF?logo=vite)](https://vitejs.dev/) [![Element Plus](https://img.shields.io/badge/Element_Plus-2.9-409EFF?logo=element)](https://element-plus.org/) [![Quartz.NET](https://img.shields.io/badge/Quartz.NET-3.18-B71731?logo=quartz)](https://www.quartz-scheduler.net/) [![License](https://img.shields.io/badge/License-MIT-green)](LICENSE)
--- ## ✨ 功能特性 - **多种任务类型** — SQL 执行任务、ETL 数据同步、SQL 监控通知、飞书表格同步 - **灵活的定时调度** — 基于 Quartz.NET,支持 Cron 表达式自定义调度 - **三种 ETL 同步模式** — 全量同步、增量同步、聚合同步 - **多数据库支持** — SQL Server、MySQL、PostgreSQL、SQLite - **多渠道通知** — 邮件通知、飞书通知、钉钉通知、企业微信通知 - **任务重试机制** — 支持任务超时设置和失败自动重试 - **分布式锁** — 基于数据库的任务锁,支持多实例部署 - **审计日志** — 记录所有操作行为,可追溯 - **RBAC 权限控制** — 基于角色的访问控制,支持用户组管理 - **Windows 服务** — 原生支持以 Windows Service 方式运行 --- ## 🛠 技术栈 ### 后端 | 技术 | 版本 | 说明 | |------|------|------| | ASP.NET Core | 10.0 | Web 框架 | | Entity Framework Core | 10.0 | ORM(多数据库支持) | | Dapper | 2.1 | 高性能数据查询 | | Quartz.NET | 3.18 | 任务调度引擎 | | JWT | — | 身份认证 | | BCrypt | 4.2 | 密码加密 | | Serilog | 4.3 | 结构化日志 | | MailKit | 4.16 | 邮件发送 | | FeishuNetSdk | 4.1 | 飞书集成 | | ClosedXML | 0.105 | Excel 导出 | | Swashbuckle | 10.1 | Swagger API 文档 | ### 前端 | 技术 | 版本 | 说明 | |------|------|------| | Vue.js | 3.5 | 前端框架 | | TypeScript | 5.8 | 类型安全 | | Vite | 6.3 | 构建工具 | | Element Plus | 2.9 | UI 组件库 | | Pinia | 3.0 | 状态管理 | | Vue Router | 4.5 | 路由管理 | | Axios | 1.9 | HTTP 请求 | | Monaco Editor | 0.52 | SQL 编辑器 | | ECharts | 6.0 | 图表可视化 | ### 数据库 SQL Server | MySQL | PostgreSQL | SQLite(默认,零配置) --- ## 📁 项目结构 ``` EasyJob/ ├── backend/ # 后端 .NET 项目 │ ├── EasyJob.Api/ # API 层(控制器、启动配置、前端静态文件) │ ├── EasyJob.Core/ # 核心层(实体、DTO、接口) │ └── EasyJob.Infrastructure/ # 基础设施层(数据访问、服务实现、调度) ├── frontend/ # 前端 Vue.js 项目 │ └── src/ │ ├── api/ # API 请求封装 │ ├── components/ # 公共组件(CronPicker、SqlEditor、FieldMapping) │ ├── layouts/ # 布局组件 │ ├── router/ # 路由配置 │ ├── stores/ # 状态管理 │ └── views/ # 页面视图 ├── database/ # 数据库初始化脚本 ├── docker-compose.yml # Docker 部署配置 ├── start.bat # 一键启动脚本(开发模式) └── deploy-service.bat # Windows 服务部署脚本 ``` --- ## 🚀 快速开始 ### 环境要求 - .NET 10.0 SDK 或更高版本 - Node.js 18+ - 数据库:SQLite(默认,零配置)/ SQL Server / MySQL / PostgreSQL ### 方式一:本地开发 ```bash # 启动后端 cd backend dotnet run --project EasyJob.Api # 启动前端 cd frontend npm install npm run dev ``` 也可以直接双击 `start.bat` 一键启动前后端。 ### 方式二:Docker 部署 ```bash docker-compose up -d ``` 部署包含以下服务: | 服务 | 说明 | 端口 | |------|------|------| | easyjob-api | 后端 API | 5000 | | easyjob-web | 前端 Web | 80 | | sqlserver | SQL Server 2022 | 1433 | ### 方式三:Windows 服务部署 右键以管理员身份运行 `deploy-service.bat`,按菜单提示操作: | 选项 | 说明 | |------|------| | [1] | 完整部署(发布 + 安装服务 + 启动) | | [2] | 仅发布项目 | | [3] | 仅安装服务(需先发布) | | [4] | 启动服务 | | [5] | 停止服务 | | [6] | 卸载服务 | | [7] | 查看服务状态 | | [8] | 重新部署(卸载 + 发布 + 安装 + 启动) | 服务默认安装到 `C:\EasyJob`,监听端口 `8090`,支持失败自动重启。 --- ## 🔑 默认账户 | 项目 | 值 | |------|------| | 用户名 | `admin` | | 密码 | `Admin@123` | --- ## 🌐 访问地址 | 服务 | 地址 | |------|------| | 前端(开发模式) | http://localhost:5173 | | 前端(Docker) | http://localhost | | 前端(Windows 服务) | http://localhost:8090 | | 后端 API(开发模式) | http://localhost:5271 | | 后端 API(Docker) | http://localhost:5000 | | Swagger 文档 | http://localhost:5271/swagger | --- ## 📡 API 接口 | 模块 | 路径 | 说明 | |------|------|------| | 认证 | `/api/auth` | 登录、注册、刷新 Token | | 任务管理 | `/api/tasks` | 任务 CRUD、执行、调度 | | 数据库连接 | `/api/dbconnections` | 数据库连接管理 | | 邮件发送者 | `/api/emailsenders` | 邮件发送账号管理 | | 飞书通知 | `/api/feishunotify` | 飞书 Webhook 通知配置 | | 飞书应用 | `/api/feishuappconfig` | 飞书应用配置管理 | | 钉钉通知 | `/api/dingtalknotify` | 钉钉 Webhook 通知配置 | | 企业微信通知 | `/api/wecomnotify` | 企业微信 Webhook 通知配置 | | 用户管理 | `/api/users` | 用户 CRUD、角色分配 | | 用户组 | `/api/usergroups` | 用户组管理 | | 审计日志 | `/api/auditlogs` | 操作日志查询 | | 仪表盘 | `/api/dashboard` | 统计数据、运行状态 | --- ## 🖥 功能页面 | 页面 | 路径 | 说明 | |------|------|------| | 仪表盘 | `/` | 任务运行统计、系统概览 | | 任务管理 | `/tasks` | 任务列表,支持筛选和搜索 | | 创建 SQL 任务 | `/tasks/create-sql` | SQL 执行任务配置 | | 创建 ETL 任务 | `/tasks/create-etl` | ETL 数据同步任务配置 | | 创建通知任务 | `/tasks/create-notification` | SQL 监控通知任务配置 | | 创建飞书表格任务 | `/tasks/create-feishu-sheet` | 飞书表格同步任务配置 | | 任务详情 | `/tasks/:id` | 任务执行记录和日志 | | 数据库连接 | `/connections` | 管理目标数据库连接信息 | | 邮件发送者 | `/email-senders` | 邮件发送账号管理 | | 飞书通知 | `/feishu-notify` | 飞书 Webhook 配置 | | 飞书应用 | `/feishu-apps` | 飞书应用凭证管理 | | 钉钉通知 | `/dingtalk-notify` | 钉钉 Webhook 配置 | | 企业微信通知 | `/wecom-notify` | 企业微信 Webhook 配置 | | 用户管理 | `/users` | 用户账户和角色管理 | | 用户组 | `/user-groups` | 用户分组管理 | | 审计日志 | `/audit-logs` | 系统操作记录查询 | --- ## ⚙️ 配置说明 后端配置位于 `backend/EasyJob.Api/appsettings.json`: | 配置项 | 说明 | |--------|------| | `DatabaseProvider` | 数据库类型(Sqlite / SqlServer / MySql / PostgreSql) | | `ConnectionStrings` | 各数据库连接字符串 | | `Jwt:Key` | Token 签名密钥 | | `Jwt:Issuer` | Token 颁发者 | | `Jwt:Audience` | Token 受众 | | `Feishu:AppId` | 飞书应用 AppId | | `Feishu:AppSecret` | 飞书应用 AppSecret | | `Urls` | 监听地址(如 `http://0.0.0.0:8090`) | --- ## 📄 License [MIT](LICENSE)