# EasyJob **Repository Path**: smartfire/EasyJob ## Basic Information - **Project Name**: EasyJob - **Description**: EasyJob 让所有的Job都变得简单。 多种任务类型 — SQL 执行任务、ETL 数据同步、SQL 监控通知、飞书表格同步 可视化工作流引擎 — 基于 DAG 的拖拽式工作流设计器,支持 10 种节点类型(数据源/SQL执行/HTTP/C#/JavaScript/条件分支/循环/分片查询/通知/AI),支持分支跳过、级联跳过、多入边合并、失败策略(Continue/Abort/Fallbac - **Primary Language**: C# - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 9 - **Created**: 2026-10-09 - **Last Updated**: 2026-10-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README English | [中文](README.md) # EasyJob A distributed task scheduling and ETL data synchronization platform built with ASP.NET Core + Vue.js ![.NET](https://img.shields.io/badge/.NET-10.0-512BD4?logo=dotnet) ![Vue.js](https://img.shields.io/badge/Vue.js-3.5-4FC08D?logo=vuedotjs) ![TypeScript](https://img.shields.io/badge/TypeScript-5.8-3178C6?logo=typescript) ![EF Core](https://img.shields.io/badge/EF%20Core-10.0-512BD4?logo=dotnet) ![Quartz.NET](https://img.shields.io/badge/Quartz.NET-4.0-512BD4) ![Vite](https://img.shields.io/badge/Vite-6.3-646CFF?logo=vite) ![License](https://img.shields.io/badge/License-MIT-green) ## Features - **Multiple Task Types** — SQL execution, ETL data sync, SQL monitoring notifications, Feishu sheet sync, and HTTP API tasks - **Visual Workflow Engine** — DAG-based drag-and-drop designer with 10 node types (DataSource/SQL/HTTP/C#/JavaScript/Condition/Loop/Sharding/Notification/AI) - **Flexible Scheduling** — Quartz.NET-based with Cron expression support, configurable thread pool (default 50) - **Three ETL Sync Modes** — Full sync, incremental sync, and aggregate sync - **Multi-Database Support** — SQL Server, MySQL, PostgreSQL, SQLite, and Oracle - **Multi-Channel Notifications** — Email, Feishu (Lark), DingTalk, and WeCom notifications - **Task Retry Mechanism** — Timeout settings and failure retry support - **Distributed High Availability** — In multi-replica deployments, guarantees "one machine, one execution per trigger window" via four-layer protection: distributed lock mutual exclusion (Redis/DB), owner-checked CAS renew/release, heartbeat abort, and same-window idempotency check. Optional Quartz clustering mode for centralized trigger arbitration and failover - **Audit Logging** — Records all system operations - **RBAC Access Control** — Role-based access control with user group management ## Tech Stack ### Backend - ASP.NET Core 10.0 - Entity Framework Core 10.0 (multi-database) - Dapper (high-performance queries) - Quartz.NET 4.0 (job scheduling, optional clustering mode) - StackExchange.Redis 3.2 (Redis distributed lock client) - JWT Authentication - BCrypt password hashing - Serilog (structured logging) - FeishuNetSdk 4.1.8 (Feishu/Lark integration) - Swashbuckle/Swagger (API documentation) ### Frontend - Vue.js 3.5 - TypeScript 5.8 - Vite 6.3 - Element Plus 2.9 (UI components) - Pinia 3.0 (state management) - Vue Router 4.5 - Axios 1.9 - Monaco Editor 0.52 (SQL editor) - ECharts 6.0 (charts) ### Database SQL Server / MySQL / PostgreSQL / SQLite / Oracle ## Project Structure ``` EasyJob/ ├── backend/ # Backend .NET project │ ├── EasyJob.Api/ # API layer (controllers, startup) │ ├── EasyJob.Core/ # Core layer (entities, DTOs, interfaces) │ └── EasyJob.Infrastructure/ # Infrastructure (data access, services, scheduling) ├── frontend/ # Frontend Vue.js project │ └── src/ │ ├── api/ # API request modules │ ├── components/ # Shared components (CronPicker, SqlEditor, FieldMapping) │ ├── layouts/ # Layout components │ ├── router/ # Route configuration │ ├── stores/ # State management │ └── views/ # Page views ├── database/ # Database initialization scripts (incl. Quartz clustering tables SQL) ├── docker-compose.yml # Docker deployment config └── start.bat # One-click startup script ``` ## Quick Start ### Prerequisites - .NET 10.0 SDK or later - Node.js 18+ - Database: SQLite (default, zero config) / SQL Server / MySQL / PostgreSQL / Oracle ### Option 1: Local Development ```bash # Start backend cd backend dotnet run --project EasyJob.Api # Start frontend cd frontend npm install npm run dev ``` Or run `start.bat` for one-click startup. ### Option 2: Docker Deployment ```bash docker-compose up -d ``` Docker deployment includes three services: | Service | Description | Port | |---------|-------------|------| | easyjob-api | Backend API | 5000 | | easyjob-web | Frontend Web | 80 | | sqlserver | SQL Server 2022 | 1433 | ## Default Account | Field | Value | |-------|-------| | Username | `admin` | | Password | `Admin@123` | ## Access URLs | Service | URL | |---------|-----| | Frontend (dev) | http://localhost:5173 | | Frontend (Docker) | http://localhost | | Backend API | http://localhost:5000 | | Swagger Docs | http://localhost:5000/swagger | ## API Endpoints | Module | Path | Description | |--------|------|-------------| | Auth | `/api/auth` | Login, register, refresh token | | Tasks | `/api/tasks` | Task CRUD, execution, scheduling | | DB Connections | `/api/db-connections` | Database connection management | | Users | `/api/users` | User CRUD, role assignment | | Audit Logs | `/api/audit-logs` | Operation log queries | | Dashboard | `/api/dashboard` | Statistics and status | ## Pages - **Dashboard** — Task execution stats and system overview - **Task Management** — Create/edit/execute SQL, ETL, notification, and Feishu sheet sync tasks - **DB Connections** — Manage target database connections - **User Management** — User accounts and roles - **User Groups** — User group management - **Audit Logs** — System operation records ## Configuration Backend configuration is located at `backend/EasyJob.Api/appsettings.json`: | Section | Key | Description | |---------|-----|-------------| | DatabaseProvider | — | Database type (`Sqlite` / `SqlServer` / `MySql` / `PostgreSql`) | | ConnectionStrings | DefaultConnection | Database connection string | | Jwt | Key, Issuer, Audience | Token key, issuer, audience, expiration | | DistributedLock | Provider, Redis:ConnectionString | Distributed lock provider: `Database` (default) / `Redis` | | Quartz | EnableClustering, ThreadPoolSize, ClusterCheckinIntervalSeconds, MisfireThresholdSeconds | Quartz clustering (default off), thread pool size (default 50), checkin interval (10s), misfire threshold (60s) | | Feishu | AppId, AppSecret | Feishu/Lark App ID and App Secret | ## License [MIT](LICENSE)