unis_crm/OMS退单回调接口文档.md

118 lines
3.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# OMS 退单回调接口文档
> OMS 系统退单后,主动回调 CRM将对应商机的项目阶段更新为 `S4`,并清空签约信息。
## 基本信息
| 项目 | 内容 |
| --- | --- |
| 接口路径 | `POST /api/oms/callback/order-return` |
| 调用方 | OMS 系统 |
| 请求头鉴权 | `X-Internal-Secret`(内部接口密钥) |
| 幂等性 | 可重试,重复调用不产生副作用 |
## 鉴权方式
与商机集成更新接口 `PUT /api/opportunities/integration/update` 保持一致,使用 `unisbase.internal-auth` 配置的密钥校验。
- 请求头字段:`X-Internal-Secret`(可通过 `unisbase.internal-auth.header-name` 覆盖)
- 秘钥值:`unisbase.internal-auth.secret`
- 校验逻辑:
-`unisbase.internal-auth.enabled=true` 时强制校验,头信息与配置密钥不一致则返回鉴权失败;
-`enabled=false` 时跳过鉴权(仅用于本地开发)。
请求示例:
```
POST /api/oms/callback/order-return
Content-Type: application/json
X-Internal-Secret: <配置的secret>
```
## 请求参数
### Bodyapplication/json
| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| `opportunityCode` | string | 是 | CRM 商机编号用于定位商机≤50 字符) |
| `orderNo` | string | 否 | OMS 退单号仅用于日志记录≤50 字符) |
请求体示例:
```json
{
"opportunityCode": "OPP-20260916-001",
"orderNo": "OMS-20260916-0001"
}
```
## 业务处理逻辑
退单回调成功后CRM 对目标商机执行如下更新:
| 字段 | 更新后值 |
| --- | --- |
| 项目阶段 `stage` | `S4` |
| 状态 `status` | `active` |
| 实际签约金额 `actual_signed_amount` | 置空(`null` |
| 是否签约 `archived` | `false` |
| 签约/归档时间 `archived_at` | 置空(`null` |
| 更新时间 `updated_at` | `now()` |
定位逻辑:按 `opportunity_code` 精确匹配商机;未匹配到或编号为空时抛出异常,不更新任何数据。整个操作在同一事务内完成。
## 响应
统一响应体:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `code` | int | 业务状态码,`0` 表示成功,非 `0` 表示失败 |
| `message` | string | 提示信息 |
| `data` | object | 返回数据 |
### 成功响应
`data` 为被更新商机的 `id`Long
```json
{
"code": 0,
"message": "success",
"data": 123
}
```
### 失败响应
| 场景 | 说明 |
| --- | --- |
| 鉴权失败 | 内部接口鉴权失败(`X-Internal-Secret` 不匹配时抛异常) |
| 商机编号为空 | 商机编号不能为空 |
| 商机不存在 | 未按 `opportunityCode` 匹配到商机 |
| 更新失败 | 数据库更新影响行数为 0 |
失败示例:
```json
{
"code": 1,
"message": "内部接口鉴权失败",
"data": null
}
```
> 注:`message` 具体文案以实际业务异常为准,示例仅供参考。
## 相关代码
- Controller[OmsCallbackController.java](file:///Users/kangwenjing/Downloads/crm/unis_crm/backend/src/main/java/com/unis/crm/controller/OmsCallbackController.java)
- 请求 DTO[OmsOrderReturnRequest.java](file:///Users/kangwenjing/Downloads/crm/unis_crm/backend/src/main/java/com/unis/crm/dto/opportunity/OmsOrderReturnRequest.java)
- Service 接口:[OpportunityService.java](file:///Users/kangwenjing/Downloads/crm/unis_crm/backend/src/main/java/com/unis/crm/service/OpportunityService.java)
- Service 实现:[OpportunityServiceImpl.java](file:///Users/kangwenjing/Downloads/crm/unis_crm/backend/src/main/java/com/unis/crm/service/impl/OpportunityServiceImpl.java)
- Mapper 实现:[OpportunityMapper.xml](file:///Users/kangwenjing/Downloads/crm/unis_crm/backend/src/main/resources/mapper/opportunity/OpportunityMapper.xml)
## 备注
- `crm_opportunity` 表无独立的「签约时间/是否签约」列,系统以 `archived`(是否签单)、`archived_at`(归档/签约时间)、`actual_signed_amount`(实际签约金额)表达签约状态,退单时三者一并清空。