179 lines
8.5 KiB
Markdown
179 lines
8.5 KiB
Markdown
# Technology Stack
|
|
|
|
**Analysis Date:** 2026-04-21
|
|
|
|
## Languages
|
|
|
|
**Primary:**
|
|
- PHP >= 7.4 - Server-side application code (all `application/` and `addons/`)
|
|
- JavaScript (ES5) - Frontend client code (`public/assets/js/`)
|
|
|
|
**Secondary:**
|
|
- HTML/Think Template - View templates (`application/*/view/`)
|
|
|
|
## Runtime
|
|
|
|
**Environment:**
|
|
- PHP >= 7.4.0 (required by `composer.json`)
|
|
- Required extensions: `ext-json`, `ext-curl`, `ext-pdo`, `ext-bcmath`
|
|
|
|
**Package Manager:**
|
|
- Composer - PHP dependency management; lockfile `composer.lock` present
|
|
- npm - Frontend dependency management; `node_modules/` present
|
|
- Lockfiles: `composer.lock` (present), `package-lock.json` (not detected)
|
|
|
|
## Frameworks
|
|
|
|
**Core:**
|
|
- ThinkPHP 5.x (dev-master from `https://gitee.com/fastadminnet/framework.git`) - PHP MVC framework, the foundation of the entire application
|
|
- FastAdmin 1.6.1 - Admin backend framework built on ThinkPHP + Bootstrap; actual internal version `1.6.2.20260323` (from `application/config.php` `fastadmin.version`)
|
|
|
|
**Frontend:**
|
|
- RequireJS 2.x - AMD module loader for JavaScript (`public/assets/js/require-backend.js`, `require-frontend.js`)
|
|
- Bootstrap 3.4.1 (via `fastadmin-bootstrap`) - UI component framework
|
|
- jQuery 3.7.1 - DOM manipulation and AJAX
|
|
- AdminLTE - Admin dashboard theme (referenced in `require-backend.js` paths)
|
|
|
|
**Testing:**
|
|
- Not detected - No test framework configured (no PHPUnit, no `tests/` directory)
|
|
|
|
**Build/Dev:**
|
|
- Grunt 1.5.3 - Task runner for frontend asset build
|
|
- requirejs optimizer (r.js) - JS/CSS minification via custom `application/admin/command/Min/r`
|
|
- uglify - JavaScript minification
|
|
- parse-config-file + jsonminify - RequireJS config parsing during build
|
|
|
|
## Key Dependencies
|
|
|
|
**Critical:**
|
|
- `topthink/framework` dev-master - ThinkPHP core framework (Gitee mirror)
|
|
- `topthink/think-captcha` ^1.0.9 - CAPTCHA image generation
|
|
- `topthink/think-queue` 1.1.6 - Redis-backed job queue system
|
|
- `topthink/think-helper` ^1.0.7 - ThinkPHP utility helpers
|
|
- `fastadminnet/fastadmin-addons` ~1.4.0 - Plugin/addon system
|
|
- `fastadminnet/fastadmin-mailer` ^2.0.0 - Email sending
|
|
|
|
**Infrastructure:**
|
|
- `guzzlehttp/guzzle` ^7.10 - HTTP client for external API requests (used in `application/index/controller/Index.php` to scrape `macaumarksix.com`)
|
|
- `overtrue/pinyin` ^3.0 - Chinese Pinyin conversion
|
|
- `overtrue/wechat` ^4.6 - WeChat SDK integration
|
|
- `phpoffice/phpspreadsheet` ^1.29.1 - Excel/CSV import-export (used in `application/admin/library/traits/Backend.php` `import()` method)
|
|
|
|
**Frontend Libraries (via npm):**
|
|
- `fastadmin-bootstraptable` ^1.11.12 - Data table with search/sort/pagination
|
|
- `fastadmin-layer` ^3.5.6 - Modal/overlay dialogs
|
|
- `fastadmin-selectpage` ^1.1.1 - Select with autocomplete
|
|
- `fastadmin-nicevalidator` ^1.1.6 - Form validation
|
|
- `eonasdan-bootstrap-datetimepicker` ^4.17.49 - Date/time picker
|
|
- `bootstrap-daterangepicker` ~2.1.25 - Date range picker
|
|
- `bootstrap-select` ^1.13.18 - Enhanced select dropdown
|
|
- `jstree` ~3.3.2 - Tree view component
|
|
- `font-awesome` ^4.6.1 - Icon font
|
|
- `moment` ^2.10 - Date manipulation
|
|
- `art-template` (via fastadmin-arttemplate) ^3.1.4 - Template engine
|
|
- `toastr` ~2.1.3 - Notification toasts
|
|
- `jquery-slimscroll` ~1.3.8 - Custom scrollbar
|
|
- `jquery.cookie` ~1.4.1 - Cookie utility
|
|
- `sortablejs` ^1.12.0 - Drag and drop sorting
|
|
- `fastadmin-dragsort` ^1.0.5 - Drag sort plugin
|
|
- `fastadmin-addtabs` ^1.0.8 - Multi-tab navigation
|
|
- `fastadmin-citypicker` ^1.3.6 - City selector
|
|
- `fastadmin-cxselect` ^1.4.0 - Cascading select
|
|
- `bootstrap-slider` ^11.0.2 - Range slider
|
|
- `tableexport.jquery.plugin` ^1.20 - Table export to Excel/CSV/PDF
|
|
- `require-css` ~0.1.8 - CSS loading via RequireJS
|
|
|
|
## Configuration
|
|
|
|
**Environment:**
|
|
- Configuration via PHP arrays in `application/config.php`, `application/database.php`, `application/extra/*.php`
|
|
- Environment variable override via `think\Env` class (e.g., `Env::get('database.hostname', '127.0.0.1')`)
|
|
- `.env` file present for environment-specific overrides (secrets not inspected)
|
|
- Key configs: `site.php` (site settings, email SMTP), `upload.php` (file upload rules), `queue.php` (Redis connection), `addons.php` (plugin hooks/routes)
|
|
|
|
**Build:**
|
|
- `Gruntfile.js` - Build orchestration
|
|
- Build tasks: `deploy` (copy libs from node_modules to `public/assets/libs/`), `frontend:js`, `backend:js`, `frontend:css`, `backend:css` (RequireJS r.js optimization)
|
|
- Default task: `grunt` = `['deploy', 'frontend:js', 'backend:js', 'frontend:css', 'backend:css']`
|
|
- Output: `public/assets/js/require-backend.min.js`, `require-frontend.min.js`, etc.
|
|
|
|
## Platform Requirements
|
|
|
|
**Development:**
|
|
- PHP >= 7.4 with extensions: json, curl, pdo, bcmath
|
|
- MySQL database (utf8mb4 charset)
|
|
- Redis (for queue system)
|
|
- Node.js + npm (for frontend dependencies and Grunt build)
|
|
- Composer (for PHP dependencies)
|
|
- `.env` file configured with database credentials
|
|
|
|
**Production:**
|
|
- Self-hosted PHP deployment (no Docker detected)
|
|
- Apache or Nginx web server (with URL rewriting for ThinkPHP PATH_INFO)
|
|
- MySQL database with `fa_` table prefix
|
|
- Redis for queue processing (`think-queue`)
|
|
- `public/` directory as web root
|
|
- `application/admin/command/Install/install.lock` present - indicates installation completed
|
|
|
|
## Module Structure
|
|
|
|
The application uses ThinkPHP multi-module architecture:
|
|
|
|
| Module | Purpose | Location |
|
|
|--------|---------|----------|
|
|
| `admin` | Backend admin panel | `application/admin/` |
|
|
| `index` | Frontend website | `application/index/` |
|
|
| `api` | REST API endpoints | `application/api/` |
|
|
| `common` | Shared code | `application/common/` |
|
|
|
|
## Recently Added Components
|
|
|
|
**Num Controller/Model** - New "数字波色" (number color/wave) feature:
|
|
- Controller: `D:\code\php\amlhc\application\admin\controller\Num.php` - Returns number-to-color mapping via `getColorMap()` API endpoint
|
|
- Model: `D:\code\php\amlhc\application\admin\model\Num.php` - Simple model for `fa_num` table, no timestamp fields
|
|
- Used by `history.js` frontend to render colored number balls in lottery result tables
|
|
|
|
**Command Controller/Model** - Online CLI command management:
|
|
- Controller: `D:\code\php\amlhc\application\admin\controller\Command.php` - CRUD for CLI commands (crud/menu/min/api generation and execution)
|
|
- Model: `D:\code\php\amlhc\application\admin\model\Command.php` - Tracks command execution history with integer timestamps, status tracking
|
|
- Validate: `D:\code\php\amlhc\application\admin\validate\Command.php` - Empty validation rules
|
|
- Addon: `D:\code\php\amlhc\addons\command\` - Plugin wrapper with menu installation via `addons\command\Command.php`
|
|
- Output library: `D:\code\php\amlhc\addons\command\library\Output.php` - Extends `\think\console\Output` to capture command output
|
|
- Frontend: `D:\code\php\amlhc\public\assets\js\backend\command.js` - Complex UI with dynamic form, table field selection, relation config
|
|
|
|
**History Controller/Model** - Lottery history records:
|
|
- Controller: `D:\code\php\amlhc\application\admin\controller\History.php` - Standard CRUD (inherits Backend trait)
|
|
- Model: `D:\code\php\amlhc\application\admin\model\History.php` - Simple model for `fa_history` table, no timestamp fields
|
|
- Validate: `D:\code\php\amlhc\application\admin\validate\History.php` - Empty validation rules
|
|
- Frontend: `D:\code\php\amlhc\public\assets\js\backend\history.js` - Custom colored ball rendering, loads color map from Num API at `num/getColorMap`
|
|
- Index controller: `D:\code\php\amlhc\application\index\controller\Index.php` - `get_history()` scrapes `https://history.macaumarksix.com/history/macaujc2/y/2026` using Guzzle
|
|
|
|
**SQL Schema:** `D:\code\php\amlhc\sql\macaujc_history.sql` - Defines `macaujc_history` table with full lottery record fields (expect, open_code, wave, zodiac, odd_even, big_small, etc.)
|
|
|
|
## CLI Commands
|
|
|
|
Registered in `application/command.php`:
|
|
- `Crud` - Code generator for CRUD operations (`app\admin\command\Crud`)
|
|
- `Menu` - Menu generator (`app\admin\command\Menu`)
|
|
- `Install` - Installation wizard (`app\admin\command\Install`)
|
|
- `Min` - Asset minification (`app\admin\command\Min`)
|
|
- `Addon` - Addon management (`app\admin\command\Addon`)
|
|
- `Api` - API documentation generator (`app\admin\command\Api`)
|
|
|
|
## Custom Extensions (extend/fast/)
|
|
|
|
Located in `extend/fast/`:
|
|
- `Auth.php` - Authentication and permission library
|
|
- `Date.php` - Date/time utilities
|
|
- `Form.php` - Form builder/generator (largest utility)
|
|
- `Http.php` - HTTP request utilities
|
|
- `Pinyin.php` - Chinese pinyin wrapper
|
|
- `Random.php` - Random string generation
|
|
- `Rsa.php` - RSA encryption utilities
|
|
- `Tree.php` - Tree data structure utilities
|
|
- `Version.php` - Version comparison utilities
|
|
|
|
---
|
|
|
|
*Stack analysis: 2026-04-21*
|