Files
hjc-web/outputs/汇吉采-标书购买-后端选型评估.md
T
gxwebsoft 2b69686795 feat(app): 添加多模板关于我们页面及相关路由和404页面
- 新增404页面,优化未找到页面体验,避免被搜索引擎索引
- 增加文件代理接口,隐藏真实文件服务器地址,支持文件请求代理
- 实现/article、/case、/product及/page动态路由兼容列表与详情展示
- 添加动态CMS页面兼容入口处理旧式路径,统一路由与SEO设置
- 新增模板1、模板7、模板2、模板3关于我们页面,实现多模板支持
- 模板增强支持CMS单页内容加载及SEO信息动态设置
- 配置环境变量及Git忽略文件规则辅助开发和构建环境管理
2026-09-08 12:13:44 +08:00

95 lines
7.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 汇吉采「标书购买」后端选型评估:复用 guilixu-java 还是 cms-api 新增?
> 阶段:**仅评估,未改动任何代码。**
> 上一轮已确认:标书购买 = 前端流程页(website-template)+ 后端账号/订单/支付。本轮聚焦「后端落哪」。
## 0. 结论(先说)
**建议在 `cms-api`(即 `cms-java-code`)里新增标书购买功能,复用其已有的 shop 订单 + payment 微信扫码支付底座;不单独启用 `guilixu-java`。**
理由一句话:`cms-api` 是模板**当前就在对接**的后台,且它**已经自带**商城(商品/订单/会员)、支付(微信 Native 扫码、`codeUrl` 返回、异步回调)、多租户(`TenantId`)——标书购买需要的后端能力它全有。`guilixu-java` 只是它的一个**裁剪分支**(只有 payment+shop+common,无 cms),且与 cms-api **独立部署、独立数据库**,单独启用反而要新增前端对接 + 双库一致性的成本。
---
## 1. 两个后端的真实身份(已查代码确认)
| 维度 | `guilixu-java` | `cms-java-code`(即 cms-api |
|---|---|---|
| Maven artifactId | `shop-api` | `com-gxwebsoft-modules``name=com-gxwebsoft-api` |
| 业务包 | 仅 `payment` + `shop` + `common` | `cms` + `shop` + `payment` + `common` + 多个垂直业务包(enterprise/dormitory/project/oa/house/pwl…) |
| 是否含 CMS 内容接口 | **否**(无 cms-page/article/nav | **是**(模板的 `/cms/cms-*` 全在这里) |
| 微信扫码支付 | 有 `WechatNativeStrategy` | 有 `WechatNativeStrategy`(返回 `codeUrl` |
| 订单能力 | `ShopOrder` 等 | `ShopOrder` + `PaymentController.createPaymentWithOrder`(创建订单并发起支付) |
| 多租户 | `TenantId` 头 | `TenantId` 头(与模板传参一致) |
| 数据库 | `db_guilixu`@47.119.165.234 | `modules`@8.134.169.209 |
| 部署关系 | 独立部署 | 独立部署(与 guilixu-java 不同机不同库) |
**关键认知纠偏**`cms-api` 不是「只有内容管理」的模块。它是完整 monolith,已内含 shop + payment,且 `WechatNativeStrategy``PaymentController` 的「创建订单并支付」逻辑可直接服务标书购买。
---
## 2. 模板到底连的是哪个后台?
- 模板 `server/api/*` 全部代理到 `modulesApiBase`cms-api)。证据:`server/api/form/submit.post.ts``/cms/cms-contact-lead/submit``product/list``page/detail``article/*` 等全走 cms-api。
- 模板目前**没有任何指向 `guilixu-java` 的代理/配置**。
- 因此:在 cms-api 新增标书接口 → 前端**零新增对接**(同 base、同 `TenantId` 头、同 JWT 体系)。在 guilixu-java 做 → 必须新增一条 server/api 代理 + 新 baseURL + 处理跨服务的租户/JWT 传递。
---
## 3. 标书购买在 cms-api 里能复用什么(已查实)
| 标书购买环节 | cms-api 现成能力 | 复用方式 |
|---|---|---|
| 供应商账号 | `shop` 模块的会员/用户体系(`ShopUser`、登录态、JWT `JwtAuthenticationFilter`) | 供应商注册/登录走现有用户体系(或新增 supplier 角色/字段) |
| 标书项目数据 | `shop``ShopGoods`/`ShopGoodsCategory` | 标书可建模为「一类特殊商品」(带发售起止、标书状态字段),或新增 `Tender` 实体复用同一套 CRUD/分页/过滤骨架 |
| 下单 | `PaymentController.createPaymentWithOrder`:创建订单 + 发起支付,要求 `loginUser != null`、自动带 `tenantId` | 标书购买直接走此接口(订单类型=标书) |
| 扫码付费 | `WechatNativeStrategy`:调微信 Native 支付,返回 `codeUrl`(前端据此渲染二维码) | 复用,无需重写扫码逻辑 |
| 支付成功回调 | `PaymentNotifyController` + `WxPayNotifyService.handlePaymentNotify` | 复用,回调里把订单置「已支付」 |
| 标书交付 | 现有文件上传/存储(`server/api/file` 后端侧) | 支付成功后按订单关联的文件下发/邮件 |
**也就是说:从「建订单 → 微信扫码 → 异步回调置已支付 → 交付」这条主链路,cms-api 已经闭环,标书购买主要是「数据建模 + 流程编排 + 前端页面」,而不是从零造支付。**
---
## 4. 为什么不选 guilixu-java(单独启用)
1. **它是 cms-api 的裁剪分支**:源码包只有 payment+shop+common,没有 cms 内容接口。而标书项目列表前端要从 cms-api 取内容(导航/站点/权限),若订单在 guilixu-java,就出现「内容在 A 库、交易在 B 库」的跨库一致性问题。
2. **独立数据库**`db_guilixu``modules` 不同机不同库,供应商账号、标书、订单若放 guilixu-java,与 cms-api 里的租户/内容无法天然关联,要额外做跨服务同步。
3. **前端要新增对接**:模板当前不认识 guilixu-java,需加代理路由 + baseURL + 租户/JWT 透传,工作量与风险都更高。
4. **重复造轮子**guilixu-java 的 shop/payment 与 cms-api 同源同构,单独跑一份只会增加部署与维护成本。
> 例外情况:若汇吉采这个客户**实际生产就在用 guilixu-javashop-api)作为交易后台**,且 cms-api 只是内容源,则需改为「cms-api 出内容 + guilixu-java 出交易」的双后端方案。但这需要你确认生产部署拓扑——从代码与模板对接关系看,模板只连 cms-api,所以默认推荐单后端(cms-api)。
---
## 5. 推荐落地(在 cms-api 内新增)
新增一个独立业务包(参照现有 `shop`/`enterprise` 分包方式,如 `com.gxwebsoft.tender` 或归入 `shop`),包含:
- 实体:`Tender`(标书项目:招标编号、发售起止、状态 onsale/ended、售价、关联文件)、`TenderOrder`(标书订单,复用订单支付链路)、可选 `SupplierProfile`(供应商扩展信息)。
- 接口:
- `GET /api/tender/list`(按 status=onsale + 分类/关键词筛选)
- `GET /api/tender/detail`
- `POST /api/tender/order`(创建标书订单 + 发起微信扫码支付,复用 `createPaymentWithOrder`
- `POST /api/tender/notify`(微信异步回调,复用 `WxPayNotifyService`
- `GET /api/tender/order/status`(前端轮询)
- `GET /api/tender/order/download`(支付后下载标书,登录态 + 订单校验)
- 供应商账号:复用现有用户体系(注册/登录/JWT),在「购买入口」做登录态门控(前端)+ 下单接口要求 `loginUser != null`(后端,已有)。
前端(website-template)配合:激活 `buy` 入口(照搬 renewal)、`BuyDocument` 改为购买流程页、注册/登录页 + `useSupplier` 登录态、对接上面 5~6 个新接口。
---
## 6. 需要你拍板/确认
1. **生产拓扑**:汇吉采生产到底连的是 cms-api,还是 guilixu-javashop-api)?从模板对接关系看是 cms-api,请确认(决定单后端还是双后端)。
2. **供应商账号**:复用现有 shop 用户体系(加 supplier 角色/字段),还是新建独立供应商表?建议前者,省一套登录态。
3. **标书建模**:当「特殊商品」复用 ShopGoods,还是新建 Tender 实体?建议新建 Tender,语义清晰、不污染商城商品。
4. **微信商户号**cms-api 的微信支付配置(`resources/wechat/<tenantId>`)是否已为该租户(10626)配好商户号与 `notify_url` 公网回调?
---
## 7. 一句话给老板
> 后端不用另起炉灶——`cms-api` 已经把「会员 + 商品 + 订单 + 微信扫码支付 + 异步回调 + 多租户」全备齐了,标书购买本质是在它里面**加一个「标书」业务包 + 编排现有支付链路**,前端再配一套购买流程页即可闭环。