1. 需求确认

2. 结构的一些变更
This commit is contained in:
2026-01-06 11:07:04 +08:00
parent e907315afa
commit 2d566a9820
18 changed files with 2210 additions and 111 deletions

1019
docs/admin-openapi.yaml Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,11 @@
## 2025-12-23T17:39:31 沟通
1. 一次性佣金(组合佣金)冲突问题
2. 阻断不合理的问题(以下都是以同为一个套餐系列下的大前提)
- 一次性佣金套餐与长期佣金不能共存(分配时阻断)
- 组合佣金与另外两种佣金不能共存(分配时应当阻断)
- 次月生效的其他套餐系列怎么处理(疑问?)
3. 聚水潭,可能存在入库是20位/19位 出库时变成19位/20位

View File

@@ -0,0 +1,845 @@
{
"type": "excalidraw",
"version": 2,
"source": "https://mindmap.so",
"elements": [
{
"id": "7R70pfEhLX0PX16Qkn1Pf",
"type": "rectangle",
"x": 331.5,
"y": 158,
"width": 450,
"height": 503,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"roundness": {
"type": 3
},
"seed": 661345629,
"version": 58,
"versionNonce": 1402242749,
"isDeleted": false,
"boundElements": null,
"updated": 1766478975006,
"link": null,
"locked": false
},
{
"id": "xMvve7y3VXeV0E3Xho43W",
"type": "rectangle",
"x": 373,
"y": 231,
"width": 358,
"height": 91,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [
"RStTR2i2emmHx8XucgL0k"
],
"frameId": null,
"roundness": {
"type": 3
},
"seed": 676835485,
"version": 51,
"versionNonce": 740750611,
"isDeleted": false,
"boundElements": [
{
"id": "nUMun3kvf0N6NybORV9Kt",
"type": "arrow"
}
],
"updated": 1766479178090,
"link": null,
"locked": false
},
{
"id": "XUgJvaNQeNV_XQIP0xk4f",
"type": "text",
"x": 412,
"y": 251,
"width": 229.10000610351562,
"height": 50,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [
"RStTR2i2emmHx8XucgL0k"
],
"frameId": null,
"roundness": null,
"seed": 935124733,
"version": 55,
"versionNonce": 858142429,
"isDeleted": false,
"boundElements": null,
"updated": 1766479038207,
"link": null,
"locked": false,
"text": "套餐A\n预存 100 返代理佣金 50",
"fontSize": 20,
"fontFamily": 1,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "套餐A\n预存 100 返代理佣金 50",
"lineHeight": 1.25
},
{
"id": "bUH4Ir1WYfhzpfRHnPBKI",
"type": "rectangle",
"x": 382.54442367331444,
"y": 446,
"width": 346,
"height": 100.5,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [
"jIcVk7sEqssxoWdPXbFaF"
],
"frameId": null,
"roundness": {
"type": 3
},
"seed": 258241363,
"version": 63,
"versionNonce": 351461469,
"isDeleted": false,
"boundElements": [
{
"id": "n1FvokZgL_6Z0aYcbltDk",
"type": "arrow"
}
],
"updated": 1766479197157,
"link": null,
"locked": false
},
{
"id": "wSwWH9NlU8QysDyvFKvgu",
"type": "text",
"x": 420.04442367331444,
"y": 473,
"width": 229.53334045410156,
"height": 50,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [
"jIcVk7sEqssxoWdPXbFaF"
],
"frameId": null,
"roundness": null,
"seed": 177000307,
"version": 43,
"versionNonce": 734560637,
"isDeleted": false,
"boundElements": null,
"updated": 1766479197157,
"link": null,
"locked": false,
"text": "套餐B\n预存 100 返代理佣金 60",
"fontSize": 20,
"fontFamily": 1,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "套餐B\n预存 100 返代理佣金 60",
"lineHeight": 1.25
},
{
"id": "-glD1Y1WuHzxh3lyXYsW_",
"type": "rectangle",
"x": 1003.071680819518,
"y": 119.33225782014824,
"width": 586.5467583232241,
"height": 486.72780698207305,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"roundness": {
"type": 3
},
"seed": 1780605853,
"version": 151,
"versionNonce": 232493277,
"isDeleted": false,
"boundElements": [
{
"id": "qSXz0n40ttVNf8QFsDzza",
"type": "arrow"
}
],
"updated": 1766479193903,
"link": null,
"locked": false
},
{
"id": "l0EWorlcCk5lYVs8G09pL",
"type": "text",
"x": 1243.3438468796337,
"y": 219.96233993799694,
"width": 103.76667022705078,
"height": 25,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"roundness": null,
"seed": 2005419091,
"version": 20,
"versionNonce": 1626040947,
"isDeleted": false,
"boundElements": null,
"updated": 1766479056726,
"link": null,
"locked": false,
"text": "余额 0 元",
"fontSize": 20,
"fontFamily": 1,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "余额 0 元",
"lineHeight": 1.25
},
{
"id": "5L_NILlIufWZdwpkYJLtR",
"type": "rectangle",
"x": 1199.1761692950536,
"y": 338.33171586467176,
"width": 217.30497371613433,
"height": 110.41919396145033,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"roundness": {
"type": 3
},
"seed": 936455635,
"version": 48,
"versionNonce": 471636563,
"isDeleted": false,
"boundElements": [
{
"type": "text",
"id": "k2gj7fxntIiWGBdYZLRDK"
}
],
"updated": 1766479065620,
"link": null,
"locked": false
},
{
"id": "k2gj7fxntIiWGBdYZLRDK",
"type": "text",
"x": 1287.8286561531208,
"y": 381.04131284539693,
"width": 40,
"height": 25,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"roundness": null,
"seed": 1694248957,
"version": 6,
"versionNonce": 915898387,
"isDeleted": false,
"boundElements": null,
"updated": 1766479067105,
"link": null,
"locked": false,
"text": "充值",
"fontSize": 20,
"fontFamily": 1,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "5L_NILlIufWZdwpkYJLtR",
"originalText": "充值",
"lineHeight": 1.25
},
{
"id": "qSXz0n40ttVNf8QFsDzza",
"type": "arrow",
"x": 1293.634684275165,
"y": 614.0102467674457,
"width": 28.18478618454128,
"height": 225.18293290636473,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"roundness": {
"type": 2
},
"seed": 772212819,
"version": 101,
"versionNonce": 1187560861,
"isDeleted": false,
"boundElements": [
{
"type": "text",
"id": "KFI__zjuOAnhhEL14zurl"
}
],
"updated": 1766479193904,
"link": null,
"locked": false,
"points": [
[
0,
0
],
[
-28.18478618454128,
225.18293290636473
]
],
"lastCommittedPoint": null,
"startBinding": {
"elementId": "-glD1Y1WuHzxh3lyXYsW_",
"focus": -0.0888623571550402,
"gap": 7.950181965224374
},
"endBinding": {
"elementId": "r85LyxyV3LekZp3zyMcmX",
"focus": -0.13056110404939236,
"gap": 5.300121310149507
},
"startArrowhead": null,
"endArrowhead": "arrow"
},
{
"id": "KFI__zjuOAnhhEL14zurl",
"type": "text",
"x": 1238.0780089113427,
"y": 713.6239250572853,
"width": 82.96666717529297,
"height": 25,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"roundness": null,
"seed": 2065498877,
"version": 12,
"versionNonce": 607232115,
"isDeleted": false,
"boundElements": null,
"updated": 1766479094170,
"link": null,
"locked": false,
"text": "充值 100",
"fontSize": 20,
"fontFamily": 1,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "qSXz0n40ttVNf8QFsDzza",
"originalText": "充值 100",
"lineHeight": 1.25
},
{
"id": "r85LyxyV3LekZp3zyMcmX",
"type": "rectangle",
"x": 1000.4216201644431,
"y": 844.4933009839599,
"width": 570.6463943927752,
"height": 299.4568540234534,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"roundness": {
"type": 3
},
"seed": 2113391891,
"version": 114,
"versionNonce": 570390515,
"isDeleted": false,
"boundElements": [
{
"id": "qSXz0n40ttVNf8QFsDzza",
"type": "arrow"
}
],
"updated": 1766479085841,
"link": null,
"locked": false
},
{
"id": "GK3W5X5r5RJIASgt0of4s",
"type": "text",
"x": 1109.0741070225101,
"y": 985.0187384779189,
"width": 367.6666564941406,
"height": 25,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"roundness": null,
"seed": 1629507315,
"version": 91,
"versionNonce": 134830867,
"isDeleted": false,
"boundElements": null,
"updated": 1766479150857,
"link": null,
"locked": false,
"text": "这时候应该是套餐A 还是 套餐 B 的返佣",
"fontSize": 20,
"fontFamily": 1,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "这时候应该是套餐A 还是 套餐 B 的返佣",
"lineHeight": 1.25
},
{
"id": "eOglLhGtYymUk0TgFMeRF",
"type": "text",
"x": 1057.0410279697514,
"y": 812.0799974504081,
"width": 140,
"height": 25,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"roundness": null,
"seed": 1869180381,
"version": 19,
"versionNonce": 786890365,
"isDeleted": false,
"boundElements": null,
"updated": 1766479150301,
"link": null,
"locked": false,
"text": "代理到账的佣金",
"fontSize": 20,
"fontFamily": 1,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "代理到账的佣金",
"lineHeight": 1.25
},
{
"type": "rectangle",
"version": 194,
"versionNonce": 1120688563,
"isDeleted": false,
"id": "khEXHiUFbo8xYH20Q9Pz7",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1773.811826114777,
"y": 105.2615755168747,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"width": 586.5467583232241,
"height": 486.72780698207305,
"seed": 958733939,
"groupIds": [],
"frameId": null,
"roundness": {
"type": 3
},
"boundElements": [
{
"id": "nUMun3kvf0N6NybORV9Kt",
"type": "arrow"
},
{
"id": "n1FvokZgL_6Z0aYcbltDk",
"type": "arrow"
}
],
"updated": 1766479182525,
"link": null,
"locked": false
},
{
"type": "text",
"version": 70,
"versionNonce": 1851133235,
"isDeleted": false,
"id": "f4Jm-0ni3hXHS_wC8CuF5",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 2014.0839921748925,
"y": 206.84723396140896,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"width": 122.96666717529297,
"height": 25,
"seed": 914282515,
"groupIds": [],
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1766479171523,
"link": null,
"locked": false,
"fontSize": 20,
"fontFamily": 1,
"text": "余额 100 元",
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "余额 100 元",
"lineHeight": 1.25
},
{
"type": "rectangle",
"version": 90,
"versionNonce": 2000876371,
"isDeleted": false,
"id": "txF94hHhoDTDYdnK2Rpud",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1969.9163145903126,
"y": 325.2166098880838,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"width": 217.30497371613433,
"height": 110.41919396145033,
"seed": 2142264755,
"groupIds": [],
"frameId": null,
"roundness": {
"type": 3
},
"boundElements": [
{
"type": "text",
"id": "4XMPCNO1ejl96mLC1C01G"
}
],
"updated": 1766479168359,
"link": null,
"locked": false
},
{
"type": "text",
"version": 48,
"versionNonce": 533663987,
"isDeleted": false,
"id": "4XMPCNO1ejl96mLC1C01G",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 2058.56880144838,
"y": 367.92620686880895,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"width": 40,
"height": 25,
"seed": 1608527699,
"groupIds": [],
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1766479168359,
"link": null,
"locked": false,
"fontSize": 20,
"fontFamily": 1,
"text": "充值",
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "txF94hHhoDTDYdnK2Rpud",
"originalText": "充值",
"lineHeight": 1.25
},
{
"id": "nUMun3kvf0N6NybORV9Kt",
"type": "arrow",
"x": 1762.2563570636948,
"y": 86.79756549606759,
"width": 1029.155703840349,
"height": 268.51694779864243,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"roundness": {
"type": 2
},
"seed": 779606077,
"version": 171,
"versionNonce": 1315938387,
"isDeleted": false,
"boundElements": null,
"updated": 1766479343039,
"link": null,
"locked": false,
"points": [
[
0,
0
],
[
-609.6576964253877,
-97.4687853219271
],
[
-1029.155703840349,
171.04816247671533
]
],
"lastCommittedPoint": null,
"startBinding": {
"elementId": "khEXHiUFbo8xYH20Q9Pz7",
"focus": 0.7341701363472869,
"gap": 18.46401002080711
},
"endBinding": {
"elementId": "xMvve7y3VXeV0E3Xho43W",
"focus": 0.6076267460111122,
"gap": 2.100653223345944
},
"startArrowhead": null,
"endArrowhead": "arrow"
},
{
"id": "n1FvokZgL_6Z0aYcbltDk",
"type": "arrow",
"x": 1793.994491291626,
"y": 611.5600639208494,
"width": 1059.7378903038618,
"height": 248.44984493824586,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"roundness": {
"type": 2
},
"seed": 1878971997,
"version": 409,
"versionNonce": 298474365,
"isDeleted": false,
"boundElements": null,
"updated": 1766479361268,
"link": null,
"locked": false,
"points": [
[
0,
0
],
[
-585.9724037055564,
179.49725434247648
],
[
-1059.7378903038618,
-68.95259059576938
]
],
"lastCommittedPoint": null,
"startBinding": {
"elementId": "khEXHiUFbo8xYH20Q9Pz7",
"focus": -0.5380556689521092,
"gap": 19.570681421901668
},
"endBinding": {
"elementId": "bUH4Ir1WYfhzpfRHnPBKI",
"focus": -0.33596246021680487,
"gap": 5.712177314449718
},
"startArrowhead": null,
"endArrowhead": "arrow"
},
{
"id": "Fnsk0wbTUHGz9Oq7sUe0o",
"type": "text",
"x": 1190.8217137057295,
"y": 267.4014912396386,
"width": 99.06666564941406,
"height": 50,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"roundness": null,
"seed": 1386888435,
"version": 18,
"versionNonce": 2062378163,
"isDeleted": false,
"boundElements": null,
"updated": 1766479223488,
"link": null,
"locked": false,
"text": "套餐A 90\n",
"fontSize": 20,
"fontFamily": 1,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "套餐A 90\n",
"lineHeight": 1.25
},
{
"id": "K8sqFrWDj3dAJJ0w8zIJU",
"type": "text",
"x": 369.0260727561474,
"y": 99.22005774297998,
"width": 205.06666564941406,
"height": 50,
"angle": 0,
"strokeColor": "#1e1e1e",
"backgroundColor": "transparent",
"fillStyle": "solid",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"frameId": null,
"roundness": null,
"seed": 1868189053,
"version": 26,
"versionNonce": 14547869,
"isDeleted": false,
"boundElements": null,
"updated": 1766479255684,
"link": null,
"locked": false,
"text": "套餐系列 (一次性佣金)\n",
"fontSize": 20,
"fontFamily": 1,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "套餐系列 (一次性佣金)\n",
"lineHeight": 1.25
}
],
"appState": {
"gridSize": null,
"viewBackgroundColor": "#ffffff"
},
"files": {}
}

View File

@@ -265,3 +265,34 @@ flowchart TD
1. 确认上面的东西是不是对的
2. 确认一下是否还有别的业务
3. 跟我讲一下我们的实际业务
1. 代理的销售价格不能大于平台给他的成本价两倍(奇成是写死的)
2. 物联网卡行业中的佣金=实际售价-平台给的成本价(这个其实是长期分佣)(阴阳菜单)
3. 一次性佣金关于客户的逻辑 客户充值100 只能≤一百(流量卡)
(号卡 可能≥100)
A 用户买了一个A产品,那么现在给代理的成本价60 售价 90 (一次性佣金)(首次购买时预存100 佣金10块)
当一个套餐被设置一次性佣金后他第一次去购买只能通过钱包付款
组合佣金(一次性佣金+长期分佣)(1.某个时间点后,2. 使用套餐个数(只作用于一个物联网卡 例如 某个套餐的使用套餐个数是10,那么这个张卡需要达到10个套餐周期后才能开始分佣,只有这一张卡才会分佣))
阶梯分佣基于一次性佣金以及长期佣金之上,当到达某个条件后,变更分佣值
阶梯分佣(提货量/激活量(实名+历史存在过套餐)/保证金(未来做的))
1. 激活量根据当前时间态统计
2. 如果是进行时统计,例如年底汇报 1-12月 每月的激活量时 应该是固定的,例如 1月的激活是10 2月的激活是20,3月的激活是30,4月的激活是40,5月的激活是50,6月的激活是60,7月的激活是70,8月的激活是80,9月的激活是90,10月的激活是100,11月的激活是110,12月的激活是120
可能会存在1月的激活中因为是历史数据,会存在同一个iccid在2月的激活量中存在,这是可以接受的,需要业务方知道
1. 一次性佣金满足 激活(实名) + 达到累计/首次充值金额 = 产生佣金(冻结) (可能是[7]天后 状态变成解冻中 同步产生一条佣金解冻审批等待审批)
2. 长期佣金满足 激活(实名) + 达到累计/首次充值金额 + 在网状态(必须是正常的)(能不能拿到在网状态 存疑) + 三无(能不能拿到 存疑) = 产生佣金(冻结 必须通过excel导入, 状态 变成 解冻中 同步产生对应的佣金解冻审批 等待审批)
3. 阶梯分佣满足 激活(实名 + 达到累计/首次充值金额 + 在网状态(必须是正常的)(能不能拿到在网状态 存疑) ) = 激活