Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
黄成意
/
go_sku_server
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
c29758c0
authored
Apr 13, 2026
by
杨树贤
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
temp
parent
eb70dcc2
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
255 additions
and
18 deletions
doc/price_generation_logic_白话版.md
doc/price_generation_logic_白话版.md
View file @
c29758c0
# 商品价
格生成逻辑说明(产品版)
# 商品价
格生成逻辑说明(产品版)
...
@@ -60,9 +60,70 @@
...
@@ -60,9 +60,70 @@
-
如果
`PriceCostUs`
和
`PriceCostCn`
都为0:调用
`GenerateLadderPrice()`
生成阶梯价
-
如果
`PriceCostUs`
和
`PriceCostCn`
都为0:调用
`GenerateLadderPrice()`
生成阶梯价
-
如果已有成本价:直接使用,应用折扣系数
-
如果已有成本价:直接使用,应用折扣系数
3.
**获取折扣系数**
(
`GetDiscountRatio`
)
:从配置获取折扣比例
3.
**获取折扣系数**
(
`GetDiscountRatio`
)
4.
**应用折扣**
:最终售价 = 成本价 × 折扣系数(这里基本都是1,都是代购渠道用得比较多)
折扣系数用于对成本价进行折扣调整,
**主要适用于代购渠道**
(专营渠道基本为1,即无折扣)。
**数据来源(Redis):**
| 供应商类型 | 配置Key | 默认Key |
|-----------|---------|---------|
| 代购(supplier_id ≠ 17)|
`magic_cube_channel_discount_daigou`
|
`magic_cube_channel_discount_default_daigou`
|
| 专营(supplier_id = 17)|
`magic_cube_channel_discount_zhuanying`
|
`magic_cube_channel_discount_default_zhuanying`
|
**专营供应商的Key格式:**
-
猎芯(OrgId = 1):渠道编码(如
`L0018319`
)
-
爱智/华云(OrgId = 3):
`渠道编码-_组织ID`
(如
`L0018319-_3`
)
**多条件匹配逻辑(按优先级从高到低):**
系统会尝试匹配最精确的折扣系数,匹配优先级:
1.
**商品名称**
(精确匹配)
2.
**标准品牌ID**
(匹配品牌)
3.
**默认配置**
(无特殊条件)
**匹配规则:**
-
按排序号从大到小遍历配置
-
任一条件匹配即命中,立即跳出
-
如果设置了商品名称或品牌但未匹配,继续检查下一个排序号
-
如果未设置任何特殊条件,直接采用该配置
**示例:**
```
配置1(排序号=100):
- 商品名称:STM32F103C8T6
- 折扣:0.95
配置2(排序号=50):
- 品牌:STMicroelectronics
- 折扣:0.92
配置3(排序号=1):
- 无特殊条件
- 折扣:0.90
场景A:商品是 STM32F103C8T6
→ 匹配配置1,折扣 = 0.95
场景B:商品是 STM32F407VGT6(同品牌)
→ 匹配配置2,折扣 = 0.92
场景C:商品是其他品牌
→ 匹配配置3,折扣 = 0.90
```
**计算应用:**
```
人民币成本 = 原始采购价 × 汇率 × 关税 × 折扣系数
美金成本 = 原始采购价 × 折扣系数
```
**找不到配置时的兜底:**
-
如果渠道无专属配置,使用全局默认配置
-
全局默认配置中区分人民币系数(
`ration`
)和美金系数(
`ration_usd`
)
4.
**应用折扣**
:最终售价 = 成本价 × 折扣系数
---
---
...
@@ -235,17 +296,39 @@ MOQ = 100,库存 = 5000
...
@@ -235,17 +296,39 @@ MOQ = 100,库存 = 5000
**流程说明:**
**流程说明:**
1.
**获取三个系数:**
1.
**获取三个系数:**
-
**折扣系数**
:商品的折扣比例
-
**售价组系数**
:不同采购数量的利润系数
-
**供应商系数**
:供应商级别的加成系数
2.
**计算成本价:**
**A. 折扣系数(`GetDiscountRatio`):**
-
美金成本 = 原始采购价 × 折扣系数
-
**数据来源**
:Redis
`magic_cube_channel_discount_daigou`
-
人民币成本 = 原始采购价 × 汇率 × 关税 × 折扣系数
-
**适用对象**
:代购供应商(supplier_id ≠ 17)
-
**作用**
:对供应商提供的原始采购价进行折扣调整
-
**匹配逻辑**
:与专营供应商相同,按优先级(商品名称 > 品牌 > 默认)匹配
-
**典型值**
:0.90 ~ 0.98(根据供应商合作折扣而定)
3.
**计算售价:**
**B. 售价组系数(`GenerateLadderPrice` 或售价组配置):**
-
美金售价 = 美金成本 × 售价组系数
-
**作用**
:在成本价基础上加上利润率
-
人民币售价 = 人民币成本 × 售价组系数
-
**来源**
:售价组配置的
`priceRatioList`
-
**典型值**
:1.05 ~ 1.20(5% ~ 20%利润)
**C. 供应商系数:**
-
**作用**
:供应商级别的额外加成(如有)
2.
**计算成本价(应用折扣系数):**
```
美金成本 = 原始采购价 × 折扣系数
人民币成本 = 原始采购价 × 汇率 × 关税 × 折扣系数
```
3. **计算售价(应用售价组系数):**
```
美金售价 = 美金成本 × 售价组系数
人民币售价 = 人民币成本 × 售价组系数
```
**完整公式串联:**
```
人民币售价 = 原始采购价 × 汇率 × 关税 × 折扣系数 × 售价组系数
美金售价 = 原始采购价 × 折扣系数 × 售价组系数
```
**特殊供应商说明:**
**特殊供应商说明:**
- **MRO(1688)**:只有人民币价格,直接作为成本价
- **MRO(1688)**:只有人民币价格,直接作为成本价
...
@@ -303,12 +386,146 @@ MOQ = 100,库存 = 5000
...
@@ -303,12 +386,146 @@ MOQ = 100,库存 = 5000
### 第三步:应用活动价格(GetActivityPrice)
### 第三步:应用活动价格(GetActivityPrice)
**业务场景:**
**业务场景:**
商品参与促销活动时,需要计算活动价。
商品参与促销活动时,需要计算活动价
并展示给用户
。
**流程说明:**
**核心判断条件(同时满足才计算活动价):**
1.
检查商品是否参与活动
1. `GoodsType`:商品类型为联营(1)、专卖(2)或寄售(6)
2.
如有活动,根据活动规则计算活动价
2. `AcType > 1`:活动类型大于1(表示有活动)
3.
活动价会覆盖标准售价展示给用户
3. `Ratio > 0`:活动折扣比例大于0
**字段说明:**
- `AcType`:活动类型(1=无活动,2=特价,3=限时折扣,4=直接覆盖原价)
- `Ratio`:人民币活动折扣比例(如90表示9折)
- `RatioUs`:美金活动折扣比例
---
#### 活动价计算方式
**计算公式:**
```
人民币活动价 = 阶梯售价 × (Ratio / 100)
美金活动价 = 阶梯售价 × (RatioUs / 100)
```
**不同组织的精度处理:**
- **猎芯(OrgId = 1)**:保留4位小数
- **爱智/华云(OrgId = 3)**:保留整数(人民币)、4位小数(美金)
---
#### 供应商类型差异处理
**A. 专营供应商(supplier_id = 17)**
针对爱智组织的特殊处理:
- 当 `OrgId == 3` 时,所有阶梯的人民币活动价都基于**第一个阶梯的售价**计算
- 美金活动价按各阶梯自身售价计算
```
示例:
阶梯1:¥100,阶梯2:¥90,阶梯3:¥85
Ratio = 90(9折)
人民币活动价计算:
-
阶梯1:¥100 × 0.9 = ¥90
-
阶梯2:¥100 × 0.9 = ¥90 ← 注意:也是基于阶梯1的价格
-
阶梯3:¥100 × 0.9 = ¥90 ← 注意:也是基于阶梯1的价格
美金活动价计算(各阶梯独立):
-
阶梯1:$15 × 0.9 = $13.5
-
阶梯2:$14 × 0.9 = $12.6
-
阶梯3:$13 × 0.9 = $11.7
```
**B. 代购供应商(supplier_id ≠ 17)**
所有阶梯的活动价都基于**各阶梯自身的售价**计算:
```
示例:
阶梯1:¥100,阶梯2:¥90,阶梯3:¥85
Ratio = 90(9折)
人民币活动价:
-
阶梯1:¥100 × 0.9 = ¥90
-
阶梯2:¥90 × 0.9 = ¥81
-
阶梯3:¥85 × 0.9 = ¥76.5
```
---
#### 特殊活动类型处理(AcType = 4)
当 `AcType == 4` 时,表示**直接覆盖原价**:
1. 将第一个阶梯的活动价**直接设为新的原价**(`PriceCn = PriceAc`)
2. 重置 `AcType = 0`,不再显示活动标签
**业务场景:** 某些活动不需要显示"活动价"标签,而是直接替换原价展示。
---
#### 活动价与原价相等的处理
**为什么前两个阶梯活动价等于原价时不展示?**
当第1或第2个阶梯的**活动价等于原价**时,系统不会展示活动价样式。
**原因:**
- 活动价有特殊的视觉样式(如红色标签、划线价等)
- 如果价格和原价一样,但样式是活动样式,客户会感到困惑
- 为避免误导,价格相同时保持原样,不显示活动标签
```
示例:
阶梯1:原价¥100,活动价¥100(Ratio=100,无折扣)
→ 不展示活动价,避免客户误以为有优惠
阶梯2:原价¥90,活动价¥90
→ 同样不展示活动价
阶梯3:原价¥85,活动价¥76.5(Ratio=90,9折)
→ 正常展示活动价
```
---
#### 活动失效判断
如果计算出的活动价都**小于等于0**,则判定活动失效:
```
go
if priceAc <= 0 && priceAcUs <= 0 {
sku.AcType = 0 // 取消活动标记
}
```
---
#### 完整示例
```
商品信息:
-
供应商ID:17(专营)
-
商品类型:2(专卖)
-
组织ID:1(猎芯)
-
AcType:3(限时折扣)
-
Ratio:85(85折)
-
RatioUs:85(85折)
阶梯价(已计算完售价):
-
1个:¥100 / $15
-
10个:¥90 / $13.5
-
100个:¥85 / $12.75
计算活动价:
-
1个:¥100×0.85=¥85 / $15×0.85=$12.75
-
10个:¥90×0.85=¥76.5 / $13.5×0.85=$11.475
-
100个:¥85×0.85=¥72.25 / $12.75×0.85=$10.8375
最终展示:
-
原价:¥100(划线价)
-
活动价:¥85(红色高亮)
```
---
---
...
@@ -399,7 +616,27 @@ MOQ = 100,库存 = 5000
...
@@ -399,7 +616,27 @@ MOQ = 100,库存 = 5000
### 第三步:应用活动价格
### 第三步:应用活动价格
和猎芯一样,检查是否有活动,应用活动价。
和猎芯的活动价处理逻辑基本一致,但有以下特殊点:
**1. 精度差异:**
- 人民币活动价:保留**整数**(猎芯保留4位小数)
- 美金活动价:保留4位小数(与猎芯相同)
**2. 专营供应商的特殊处理(OrgId = 3):**
```
go
// 所有阶梯的人民币活动价都基于第一个阶梯的售价计算
tempAcPrice = c.MyRound(c.MulFloat(sku.LadderPrice
[
0
]
.PriceCn, sku.Ratio/100), 0)
```
**示例对比:**
| 阶梯 | 原价 | 猎芯活动价 | 爱智活动价 |
|-----|------|-----------|-----------|
| 1个 | ¥100.50 | ¥90.4500 | ¥90 |
| 10个 | ¥95.80 | ¥86.2200 | ¥90(基于阶梯1)|
| 100个 | ¥90.30 | ¥81.2700 | ¥90(基于阶梯1)|
**注:** 美金活动价两个组织都保留4位小数,计算方式相同。
---
---
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment