12 KiB
我们要把第三阶段的功能分为几大块
server\php\app\admin
你先看一下php中的代码。看一下要先迁移哪个模块。
好的,让我先看一下 PHP 后台的代码结构,分析各个模块的依赖关系和复杂度。
让我继续查看更多 PHP 控制器,了解订单、财务等模块:
现在我对 PHP 后台的业务模块有了全面的了解。让我总结一下分析结果,并给出阶段3的模块划分建议:
阶段3 业务模块迁移分析
根据 PHP 后台代码分析,我建议将阶段3分为以下几大块:
模块划分建议
| 批次 | 模块名称 | PHP 控制器 | 复杂度 | 依赖关系 | 预计工时 |
|---|---|---|---|---|---|
| 批次1 | 首页仪表盘 | Index.php | 低 | 依赖用户、订单数据 | 1天 |
| 批次2 | 用户管理 | User.php | 高 | 核心模块,被其他模块依赖 | 3天 |
| 批次3 | 商品管理 | Goods.php, GoodsType.php | 高 | 9种盒子类型,奖品配置复杂 | 4天 |
| 批次4 | 订单管理 | Order.php | 高 | 依赖用户、商品,含发货/导出 | 3天 |
| 批次5 | 财务管理 | Finance.php, Withdraw.php | 中 | 依赖用户、订单 | 2天 |
| 批次6 | 系统配置 | Config.php | 中 | 独立模块 | 1天 |
建议迁移顺序
推荐从「首页仪表盘」开始,原因:
- 复杂度最低,可快速验证跨库访问是否正常
- 只读操作,不涉及数据修改
- 能快速看到成果,建立信心
然后按以下顺序:
- 首页仪表盘 → 验证基础架构
- 用户管理 → 核心模块,其他模块都依赖它
- 商品管理 → 业务核心
- 订单管理 → 依赖用户和商品
- 财务管理 → 依赖用户和订单
- 系统配置 → 独立模块,可随时做
各模块主要功能
首页仪表盘:
- 今日注册/消费统计
- 广告数据统计
用户管理(2000+行代码):
- 用户列表(含消费统计、盒柜价值)
- 资金变动(余额/积分/钻石)
- 封号/解封、测试账号设置
- 清空手机号/微信绑定
- 赠送优惠券/卡牌
- VIP管理、用户盈亏、下级用户
商品管理(2300+行代码):
- 盒子CRUD(9种类型)
- 奖品管理(添加/编辑/删除/库存)
- 盒子类型管理
- 复杂的库存和套数逻辑
订单管理(1300+行代码):
- 卡单列表、购买订单、兑换订单
- 发货订单(单个/批量发货)
- 订单导出(Excel)
- 订单取消
财务管理:
- 消费排行榜
- 余额/积分/钻石明细
- 充值记录
- 提现审核
系统配置:
- 微信支付/支付宝配置
- 小程序/H5配置
- 上传配置
- 系统参数
你想从哪个模块开始?我建议先从首页仪表盘开始,快速验证跨库访问,然后再进入用户管理这个核心模块。
我的建议是,先迁移系统配置模块。系统配置 都是一些简单的curd。你觉得呢?
同意!系统配置确实是个好的起点:
- 独立性强 - 不依赖其他业务模块,可以独立完成
- 逻辑简单 - 就是配置的读取和保存,标准 CRUD
- 验证跨库 - 需要访问
honey_box业务库的config表,正好验证跨库访问 - 风险低 - 即使出问题也不影响核心业务
从 PHP 代码看,Config 模块主要功能:
- 基础配置 (base)
- 微信支付配置 (weixinpay_setting)
- 支付宝配置 (alipay_setting)
- 小程序配置 (miniprogram_setting)
- H5配置 (h5_setting)
- 上传配置 (uploads)
- 系统配置 (systemconfig)
- 签到配置 (sign)
本质上就是对 config 表按 key 字段进行 JSON 数据的读写。
那我们开始吧?需要做的事情:
- 配置跨库访问 - 让 HoneyBox.Admin 能访问
honey_box业务库 - 创建业务控制器目录 -
Controllers/Business/ - 创建 ConfigController - 实现配置的 CRUD API
- 创建 ConfigService - 业务逻辑层
要我现在开始实现系统配置模块吗?
首先我们要搭建一下跨库的数据实体。配置好跨库访问。ConfigService 你打算创建在哪个位置
好问题!根据迁移计划的架构设计,有两个选择:
方案对比
| 方案 | 位置 | 优点 | 缺点 |
|---|---|---|---|
| A | HoneyBox.Admin/Services/Business/ |
Admin 项目自包含,可独立复用 | 业务逻辑分散在两个地方 |
| B | HoneyBox.Core/Services/ |
业务逻辑集中,可被 Api 和 Admin 共用 | Admin 依赖 Core |
我的建议:方案 B
把 ConfigService 放在 HoneyBox.Core/Services/ 中,原因:
- 配置服务是通用的 - 用户端 API 可能也需要读取某些配置(如系统开关、支付配置等)
- 避免重复代码 - 如果放在 Admin 里,将来 Api 需要时还得再写一遍
- 符合分层架构 - Core 层本来就是放业务逻辑的地方
跨库访问架构
HoneyBox.Admin
│
├── Controllers/Business/ConfigController.cs (后台管理 API)
│
└── 引用 HoneyBox.Core
│
├── Services/ConfigService.cs (业务逻辑)
│
└── 引用 HoneyBox.Model
│
├── Entities/Config.cs (实体)
└── Data/HoneyBoxDbContext.cs (已有,访问 honey_box 库)
需要做的步骤
- HoneyBox.Model - 添加
Config实体(如果还没有) - HoneyBox.Core - 创建
IConfigService和ConfigService - HoneyBox.Admin - 引用 Core,注入
HoneyBoxDbContext,创建ConfigController
你觉得这个方案可以吗?确认后我先看一下现有的实体和 DbContext 结构。
你先看一下现在的实体,和DbContext ,然后在看一下我们最初设计的架构方案:docs\后台管理系统迁移计划.md
好的,让我先查看现有的实体和 DbContext 结构:
让我查看 Config 实体和迁移计划中的架构设计:
现在我完全理解了架构设计。根据迁移计划:
架构分析
现有结构:
HoneyBox.Admin- 独立可复用的后台管理项目,自包含 Entities/Services/DbContextHoneyBox.Model- 业务数据层,已有Config实体和HoneyBoxDbContextHoneyBox.Core- 用户端业务逻辑层
迁移计划设计理念:
HoneyBox.Admin通过可选引用HoneyBox.Core/Model来访问业务数据- 业务模块的 Service 应该放在
HoneyBox.Admin/Services/Business/下(保持 Admin 自包含)
结论:ConfigService 应该放在 HoneyBox.Admin/Services/Business/
原因:
- 符合迁移计划设计 - Admin 项目自包含,业务服务放在
Services/Business/下 - Config 实体已存在 -
HoneyBox.Model已有Config实体,Admin 只需引用 Model 即可 - 保持独立性 - 如果放在 Core 里,会破坏 Admin 的独立可复用性
需要做的步骤
- 配置 HoneyBox.Admin 引用 HoneyBox.Model - 添加项目引用
- 注入 HoneyBoxDbContext - 在 Admin 的 Program.cs 中配置
- 创建
Services/Business/目录 - 存放业务服务 - 创建
IConfigService和ConfigService- 配置管理服务 - 创建
Controllers/Business/ConfigController- 配置管理 API
你确认这个方案吗?确认后我开始实现。
能创建一个 HoneyBox.Admin.Business 的后台管理核心库吗?我不想在webapi中写太多不是后台管理的业务代码,因为后面其他项目如果要使用的话,我直接把控制器中的 Business文件夹删掉就好了,在webapi中写太多,我不好清理代码。
这个想法很好!创建一个独立的 HoneyBox.Admin.Business 类库来存放业务模块的服务,这样:
- HoneyBox.Admin - 保持纯净,只包含后台管理基础功能(认证、菜单、角色、权限)
- HoneyBox.Admin.Business - 业务模块服务(配置、用户、商品、订单等)
- 复用时 - 只需删除
Controllers/Business/和移除对HoneyBox.Admin.Business的引用
新的架构
HoneyBox.sln
├── src/
│ ├── HoneyBox.Admin/ # 后台管理基础 (可独立复用)
│ │ ├── Controllers/
│ │ │ ├── AuthController.cs # 认证
│ │ │ ├── MenuController.cs # 菜单
│ │ │ ├── RoleController.cs # 角色
│ │ │ └── Business/ # 业务控制器 (复用时删除)
│ │ │ └── ConfigController.cs
│ │ ├── Services/ # 基础服务 (认证、菜单、角色)
│ │ ├── Entities/ # Admin 专用实体
│ │ └── Data/AdminDbContext.cs
│ │
│ ├── HoneyBox.Admin.Business/ # 业务模块服务 (新增)
│ │ ├── Services/
│ │ │ ├── IConfigService.cs
│ │ │ ├── ConfigService.cs
│ │ │ ├── IUserBusinessService.cs # 后续
│ │ │ └── ...
│ │ ├── Models/ # 业务 DTO
│ │ └── HoneyBox.Admin.Business.csproj
│ │
│ ├── HoneyBox.Model/ # 业务实体 (已有 Config 等)
│ └── HoneyBox.Core/ # 用户端业务逻辑
依赖关系
HoneyBox.Admin
├── HoneyBox.Admin.Business (业务服务)
└── (自包含基础功能)
HoneyBox.Admin.Business
└── HoneyBox.Model (业务实体)
确认这个方案吗?我现在开始创建 HoneyBox.Admin.Business 项目。
业务的控制器也能在HoneyBox.Admin.Business类库中创建吗?在HoneyBox.Admin启动的时候挂在一下.这个好搞不
可以的!ASP.NET Core 支持从外部程序集加载控制器,只需要在启动时配置一下。
实现方式
// HoneyBox.Admin/Program.cs
builder.Services.AddControllers()
.AddApplicationPart(typeof(HoneyBox.Admin.Business.Controllers.ConfigController).Assembly);
或者更优雅的方式,在 HoneyBox.Admin.Business 中提供扩展方法:
// HoneyBox.Admin.Business/Extensions/ServiceCollectionExtensions.cs
public static class ServiceCollectionExtensions
{
public static IMvcBuilder AddAdminBusiness(this IMvcBuilder builder)
{
// 注册控制器
builder.AddApplicationPart(typeof(ConfigController).Assembly);
// 注册服务
builder.Services.AddScoped<IConfigService, ConfigService>();
// ... 其他业务服务
return builder;
}
}
// HoneyBox.Admin/Program.cs
builder.Services.AddControllers()
.AddAdminBusiness(); // 一行搞定
最终架构
HoneyBox.Admin.Business/ # 业务模块 (完全独立)
├── Controllers/
│ ├── ConfigController.cs
│ ├── UserController.cs
│ └── ...
├── Services/
│ ├── IConfigService.cs
│ ├── ConfigService.cs
│ └── ...
├── Models/ # 业务 DTO
└── Extensions/
└── ServiceCollectionExtensions.cs # 一键注册
复用 HoneyBox.Admin 时:
- 移除对
HoneyBox.Admin.Business的引用 - 删除
.AddAdminBusiness()调用 - 完事!
这样更干净,要开始创建吗?
可以,你先创建一下后台业务的迁移过程,架构设计,怎么迁移,迁移步骤,验证逻辑,我们先创建需求文档。
server\php\app\admin\controller 这个是控制器
server\php\app\admin\view 这个是后台管理的页面。
我们要分几个阶段去迁移完成。