Compare commits
409 Commits
Author | SHA1 | Date | |
---|---|---|---|
408e6af1f1 | |||
7943706a1f | |||
e6c9dfe8d0 | |||
34bea37e44 | |||
ff82d26a2f | |||
5d1c9036a1 | |||
95620e0d7f | |||
71959b77c8 | |||
2e76ff7307 | |||
1d276703b0 | |||
7a17648052 | |||
32dd059e15 | |||
dbf42fd327 | |||
a720b17bd2 | |||
8112ad43a1 | |||
885b8bc0cc | |||
d9da6f0f68 | |||
b80bc1bf65 | |||
41d1ee3b39 | |||
9eda6efcbe | |||
c85be0bd29 | |||
4313975245 | |||
f1656f0bc8 | |||
16223eaf14 | |||
93b58cd654 | |||
1cf3f1e9ed | |||
819af2abfc | |||
8675dad7a4 | |||
ae8acd9e01 | |||
c4bd8e2ac7 | |||
4ec7a4401e | |||
e36330bcb6 | |||
faae5a261c | |||
652ed3a57e | |||
5a9a3e8228 | |||
aa71f775c6 | |||
c618a1874a | |||
72504832de | |||
5bcda69f8e | |||
f4804eac5e | |||
19d0026ecd | |||
92b6205be6 | |||
2e78aec813 | |||
760025d05d | |||
1f166735df | |||
7967983535 | |||
ca05e5c86f | |||
7f7f079b16 | |||
2f5b219f43 | |||
802d948450 | |||
4790d2ae6f | |||
4dae5aa6f5 | |||
1590908868 | |||
636507606f | |||
f6bf54b2b0 | |||
a130f536ec | |||
0601fb06ff | |||
0ec3019ca0 | |||
5d06c8dece | |||
9c1f7b8520 | |||
ab3f874e91 | |||
541b9ed6bc | |||
69704c712e | |||
c8295b3a7c | |||
8e0c904be6 | |||
94ef5926fe | |||
3ce06361cc | |||
3bae2d1ed3 | |||
ec7526ea0d | |||
5c652ed421 | |||
6940086c21 | |||
5cc5ce2002 | |||
47e9677d3d | |||
5b66de6460 | |||
dab072704b | |||
4ac6940fc6 | |||
407a0441bc | |||
20e273b7be | |||
b9f34b8375 | |||
77e8ae356a | |||
33ab730507 | |||
bb9d9b966c | |||
5fb70a3c5d | |||
0bba09a84c | |||
6c751c2ea0 | |||
24dc499afd | |||
6d8972d0d2 | |||
0bf9f66049 | |||
70cd186ddd | |||
004c8c1dc5 | |||
75c0db8cfa | |||
e7e6a41bfa | |||
59386f96f6 | |||
633e7be808 | |||
129845445a | |||
28c0976dcf | |||
1dbb4482d5 | |||
5471213abc | |||
c11e236a6e | |||
dae6a3320e | |||
0212d99203 | |||
210da1a5ee | |||
8e67b926ba | |||
b2159da09d | |||
42aeec0fad | |||
f5a1d7a255 | |||
22bbf5aeb2 | |||
3095230cd4 | |||
779f2453a3 | |||
20c8dfdd2e | |||
bd3d424b36 | |||
cc42d873e0 | |||
51bf14f203 | |||
85dd15e93b | |||
a734a26c89 | |||
cbcb59102a | |||
4958ab2449 | |||
7e5ac26138 | |||
ee4049bdf4 | |||
c439fecf01 | |||
06e65d4b9b | |||
ccdc358352 | |||
8127fbed85 | |||
2a3cf95a99 | |||
b9eca1f046 | |||
ba6550677e | |||
670fd811ef | |||
8633b50ba9 | |||
74f7e08d07 | |||
c2cc6463f5 | |||
3b7744e991 | |||
9459e488ef | |||
c05cca3ef9 | |||
2112beff4e | |||
3bd18365c8 | |||
4678e7633f | |||
064188d163 | |||
2b0524c6d0 | |||
75a7347ea8 | |||
ebc3798d27 | |||
8b3fafc7db | |||
152c5ae2fb | |||
1d83c387a0 | |||
242e724ab7 | |||
097ab7f4d6 | |||
d0b8b44562 | |||
d9a1309ae9 | |||
06387f9be4 | |||
cfa25020aa | |||
644038f7de | |||
10660f5815 | |||
6071ffa949 | |||
b5b3de82b3 | |||
b151d6d563 | |||
580a1bf7d7 | |||
d3236feec1 | |||
c83312bd16 | |||
9edeed7598 | |||
a7ce1552ea | |||
d66d3b2882 | |||
218c852296 | |||
d91744bde0 | |||
6e185c9219 | |||
9feeb3db0e | |||
d291571d1d | |||
4ecd8ad5ca | |||
75dda66974 | |||
8f23a7594b | |||
916f195562 | |||
d5cb707f5d | |||
801cabf89b | |||
8e25a03c00 | |||
4bb83e85b8 | |||
e77f281aed | |||
c90ccc97c3 | |||
c40850e9b9 | |||
f0b64b6b25 | |||
91407e3469 | |||
a886e763e8 | |||
3509f0f52a | |||
e3b1a50444 | |||
2e37f4648c | |||
8ccb02cebb | |||
aaf06ace58 | |||
c759d44d4c | |||
56252ce7cd | |||
01628d71af | |||
b6ea41dd8b | |||
d1ad014e94 | |||
0d8bc24b67 | |||
3c49e94e07 | |||
72a2792c4b | |||
4835de591f | |||
35f8a0a4ed | |||
76d0697718 | |||
b89878bf0c | |||
930aad8baf | |||
5583b30f0a | |||
4b1cd3906f | |||
38fef115b9 | |||
3151336cfc | |||
e6342742c1 | |||
e22f65f874 | |||
d7c487ee7a | |||
ace50e6ad9 | |||
5ea9f987a6 | |||
bc654fe78c | |||
97de5c371b | |||
9e21f2bc68 | |||
acf50897de | |||
bbd3022c4a | |||
e87033ee52 | |||
046991955a | |||
741f231f3d | |||
37953674af | |||
464ed5bfd6 | |||
3a6feee74a | |||
139d34df53 | |||
a1aed9126b | |||
86fffe38ed | |||
0144095460 | |||
34e41ef1e7 | |||
a7b0702233 | |||
2a9b82235e | |||
d7f5fc446a | |||
b290399053 | |||
94b299e941 | |||
0403d4f8dd | |||
054cb429b4 | |||
5d459721d6 | |||
4b4d239725 | |||
689aeb5007 | |||
2a74092ce6 | |||
f70af1f125 | |||
15bc535c20 | |||
246d98866f | |||
cd629e4ee7 | |||
8eb334cccb | |||
dd0526b33c | |||
20a2dfe42c | |||
43990834c6 | |||
27f767c250 | |||
ac5b1e4e5a | |||
dab4beee4c | |||
52eb62500b | |||
baf3ec156a | |||
b61715e003 | |||
c88c3b52cf | |||
1daf9f4ad4 | |||
1b6260fa45 | |||
7790da5bf5 | |||
da43595c54 | |||
482225ee1b | |||
e09c35b04a | |||
db90bbeb27 | |||
8c5edfc165 | |||
64e999359d | |||
b991e26db1 | |||
c685bc641f | |||
9b7b74f13b | |||
748dd7ce1b | |||
f1aeb3d5df | |||
1ce9564233 | |||
e1e2d1b1ba | |||
f098e23c2d | |||
919f124a05 | |||
cde393f8e8 | |||
1904bc66a2 | |||
8cfe32cc6d | |||
bc2fa2cada | |||
08e692b4c3 | |||
5ed44a7be2 | |||
4871ed95ed | |||
5fc175ad6a | |||
f637ef924e | |||
ddbaa5e00b | |||
c95e16a20d | |||
9323e8d3a3 | |||
458a06073e | |||
659e2338ea | |||
e0d84d5ebe | |||
452219ae80 | |||
bc4b24d122 | |||
d8090cfd01 | |||
b3d771734c | |||
8cc13858c9 | |||
2bd9e32a77 | |||
47068b19c3 | |||
19d2987ae1 | |||
b0a51da4a1 | |||
b8e2b227e8 | |||
f8cb96c822 | |||
1162f5c9fc | |||
5881b5d15e | |||
b86dbed2f9 | |||
c8150cbb53 | |||
e21a8ee02a | |||
479cfc7961 | |||
3eec165d33 | |||
33a7149243 | |||
1306a536a4 | |||
12d341e715 | |||
0686539425 | |||
6a90a4fce4 | |||
de888bd8c6 | |||
efae36b500 | |||
f2675f9510 | |||
420c7d97de | |||
0457a676cd | |||
b6c462b365 | |||
a580ca574f | |||
378a43fdf1 | |||
d2e22f94e7 | |||
42b8ff06e3 | |||
d7dffbb451 | |||
40a9c65327 | |||
19367e5087 | |||
c1815d7cb2 | |||
0f6f66c2af | |||
d566e49e3f | |||
31ee1d7825 | |||
2054b84457 | |||
a6ac4731e8 | |||
e75ffb57b5 | |||
5efe930921 | |||
d983cc452a | |||
1679f42da5 | |||
8af13743e3 | |||
2ab7473134 | |||
7744d4e100 | |||
f9e8e4a8e8 | |||
324e641b20 | |||
9177a4d13b | |||
9558da4bcd | |||
50cc78d351 | |||
ec807615eb | |||
da25896aeb | |||
33d4ad336c | |||
bd8852ce28 | |||
cb7ff5ecee | |||
230b41fd91 | |||
018d8777ae | |||
73799eb7b7 | |||
5eac8cd6dd | |||
1e1042cbd1 | |||
cfcebd86ab | |||
7ed3516c58 | |||
e470c7ef38 | |||
d691c045ba | |||
6fe118b5d1 | |||
820dcb959e | |||
0502931e54 | |||
235a8e1765 | |||
80d610866b | |||
606e336824 | |||
1008057c95 | |||
4f648854da | |||
883aaae85f | |||
640b202657 | |||
e9ea5678fd | |||
7761cf034d | |||
7040d28504 | |||
437c94a08c | |||
8159c7841d | |||
b01964849c | |||
92011b3bb7 | |||
e66878d32b | |||
07dc474e66 | |||
48d0cb29bf | |||
e108c12355 | |||
18c109d09f | |||
02cee71a78 | |||
29271acf80 | |||
8f34911b57 | |||
9551a70ef4 | |||
03eb305d55 | |||
76138c502c | |||
99ea902c02 | |||
4650664e0f | |||
d4b3191640 | |||
c3fd187fdb | |||
d53d394f54 | |||
77631884fb | |||
1c854c99dc | |||
d4d790fbda | |||
281b668d93 | |||
7c10e2417c | |||
ec7314bd73 | |||
a652ac0af3 | |||
cde15126f0 | |||
7410a75c46 | |||
1d693cad83 | |||
a30fe40f1c | |||
4a44417257 | |||
693ed97e64 | |||
0733bd6e3a | |||
8825b20df8 | |||
76372046f7 | |||
333502c54a | |||
70bdb625ed | |||
ed6e464fac | |||
51489b9766 | |||
69562f6a8f | |||
8126e4b428 | |||
725ed43853 | |||
e8eb79ddde | |||
d41ecda55d | |||
c0e8127c2b | |||
5261003f47 |
@ -1,5 +0,0 @@
|
|||||||
# knowledge
|
|
||||||
|
|
||||||
<!--stackedit_data:
|
|
||||||
eyJoaXN0b3J5IjpbLTE4NzU3Njk1NzldfQ==
|
|
||||||
-->
|
|
@ -1,148 +0,0 @@
|
|||||||
# 欢迎来到 StackEdit 中文版!
|
|
||||||
|
|
||||||
你好!我是你在 **StackEdit中文版** 中的第一个 Markdown 文件。如果你想了解 StackEdit中文版,可以阅读此文章。如果你想玩 Markdown,你也可以编辑此文章。另外,您可以通过打开导航栏左边的**文件资源管理器**来创建新文件。
|
|
||||||
|
|
||||||
# 文件
|
|
||||||
|
|
||||||
StackEdit中文版 将您的文件存储在您的浏览器中,这意味着您的所有文件都会自动保存在本地并且可以**离线访问!**
|
|
||||||
|
|
||||||
## 创建文件和文件夹
|
|
||||||
|
|
||||||
使用导航栏左边的文件夹图标可以访问文件资源管理器。您可以通过单击文件资源管理器中的 **创建文件** 图标来创建新文件。您还可以通过单击 **创建文件夹** 图标来创建文件夹。
|
|
||||||
|
|
||||||
## 切换到另一个文件
|
|
||||||
|
|
||||||
您的所有文件和文件夹在文件资源管理器中都显示为树。您可以通过单击树中的文件从一个文件切换到另一个文件。
|
|
||||||
|
|
||||||
## 重命名文件
|
|
||||||
|
|
||||||
您可以通过单击导航栏中的文件名或单击文件资源管理器中的**重命名**图标来重命名当前文件。
|
|
||||||
|
|
||||||
## 搜索文件
|
|
||||||
|
|
||||||
您可以通过单击文件资源管理器中的**搜索文件**图标来通过关键字在整个文档空间中搜索文件。
|
|
||||||
|
|
||||||
## 删除一个文件
|
|
||||||
|
|
||||||
您可以通过单击文件资源管理器中的 **删除** 图标来删除当前文件。该文件将被移至 **回收站** 文件夹并在 7 天不活动后自动删除。
|
|
||||||
|
|
||||||
## 导出文件
|
|
||||||
|
|
||||||
您可以通过单击菜单中的 **导入/导出** 来导出当前文件。您可以选择将文件导出为纯 Markdown、使用 Handlebars 模板的 HTML 或 PDF。
|
|
||||||
|
|
||||||
|
|
||||||
# 同步
|
|
||||||
|
|
||||||
同步是 StackEdit中文版 的最大特点之一。它使您可以将文档空间中的任何文件与存储在**Gitee** 和 **GitHub** 账号中的其他文件同步。这使您可以继续在其他设备上写作,与您共享文件的人协作,轻松集成到您的工作流程中......同步机制在后台每分钟触发一次,下载、合并和上传文件修改。
|
|
||||||
|
|
||||||
有两种类型的同步,它们可以相互补充:
|
|
||||||
|
|
||||||
- 文档空间同步将自动同步您的所有文件、文件夹和设置。这将允许您在任何其他设备上获取您的文档空间。
|
|
||||||
> 要开始同步您的文档空间,只需在菜单中使用 Gitee 登录。
|
|
||||||
|
|
||||||
- 文件同步将保持文档空间的一个文件与**Gitee**或**GitHub**中的一个或多个文件同步。
|
|
||||||
> 在开始同步文件之前,您必须在**同步**子菜单中链接一个账号。
|
|
||||||
|
|
||||||
## 打开一个文件
|
|
||||||
|
|
||||||
您可以通过打开 **同步** 子菜单并单击 **从...打开** 从**Gitee** 或 **GitHub** 打开文件。在文档空间中打开后,文件中的任何修改都将自动同步。
|
|
||||||
|
|
||||||
## 保存文件
|
|
||||||
|
|
||||||
您可以通过打开 **同步** 子菜单并单击 **在...保存** 将文档空间的任何文件保存到**Gitee** 或 **GitHub**。即使文档空间中的文件已经同步,您也可以将其保存到另一个位置。 StackEdit中文版 可以将一个文件与多个位置和账号同步。
|
|
||||||
|
|
||||||
## 同步文件
|
|
||||||
|
|
||||||
一旦您的文件链接到同步位置,StackEdit中文版 将通过下载/上传任何修改来定期同步它。如有必要,将执行合并并解决冲突。
|
|
||||||
|
|
||||||
如果您刚刚修改了文件并且想要强制同步,请单击导航栏中的 **立即同步** 按钮。
|
|
||||||
|
|
||||||
> **注意:** 如果您没有要同步的文件,**立即同步**按钮将被禁用。
|
|
||||||
|
|
||||||
## 管理文件同步
|
|
||||||
|
|
||||||
由于一个文件可以与多个位置同步,您可以通过单击**同步**子菜单中的**文件同步**列出和管理同步位置。这允许您列出和删除链接到您的文件的同步位置。
|
|
||||||
|
|
||||||
|
|
||||||
# 发布
|
|
||||||
|
|
||||||
在 StackEdit中文版 中发布使您可以轻松地在线发布文件。对文件感到满意后,您可以将其发布到不同的托管平台,例如 **Blogger**、**Gitee**、**Gist**、**GitHub**、**WordPress** 和 **Zendesk**。使用 [Handlebars 模板](http://handlebarsjs.com/),您可以完全控制导出的内容。
|
|
||||||
|
|
||||||
> 在开始发布之前,您必须在**发布**子菜单中链接一个账号。
|
|
||||||
|
|
||||||
## 发布文件
|
|
||||||
|
|
||||||
您可以通过打开 **发布** 子菜单并单击 **发布到** 来发布您的文件。对于某些位置,您可以选择以下格式:
|
|
||||||
|
|
||||||
- Markdown:在可以解释的网站上发布 Markdown 文本(例如**GitHub**),
|
|
||||||
- HTML:通过 Handlebars 模板发布转换为 HTML 的文件(例如在博客上)。
|
|
||||||
|
|
||||||
## 更新发布
|
|
||||||
|
|
||||||
发布后,StackEdit中文版 会将您的文件链接到该发布,这使您可以轻松地重新发布它。一旦您修改了文件并想要更新您的发布,请单击导航栏中的**立即发布**按钮。
|
|
||||||
|
|
||||||
> **注意:** 如果您没有要同步的文件,**立即同步**按钮将被禁用。
|
|
||||||
|
|
||||||
## 管理文件同步
|
|
||||||
|
|
||||||
由于一个文件可以与多个位置同步,您可以通过单击**同步**子菜单中的**文件同步**列出和管理同步位置。这允许您列出和删除链接到您的文件的同步位置。
|
|
||||||
|
|
||||||
# Markdown扩展
|
|
||||||
|
|
||||||
StackEdit中文版 通过添加额外的 **Markdown扩展** 扩展了标准 Markdown 语法,为您提供了一些不错的功能。
|
|
||||||
|
|
||||||
> **提示:** 您可以在 **文件属性** 对话框中禁用任何 **Markdown 扩展名**。
|
|
||||||
|
|
||||||
|
|
||||||
## SmartyPants
|
|
||||||
|
|
||||||
SmartyPants 将 ASCII 标点字符转换为“智能”印刷标点 HTML 实体。例如:
|
|
||||||
|
|
||||||
| |ASCII |HTML |
|
|
||||||
|----------------|--------------------------------| ------------------------------|
|
|
||||||
|单反引号|`'这不好玩吗?'` |'这不好玩吗?' |
|
|
||||||
|引用|`“这不好玩吗?”` |“这不好玩吗?” |
|
|
||||||
|破折号 |`-- 是破折号,--- 是破折号`|-- 是破折号,--- 是破折号|
|
|
||||||
|
|
||||||
|
|
||||||
## KaTeX
|
|
||||||
|
|
||||||
您可以使用 [KaTeX](https://khan.github.io/KaTeX/) 渲染 LaTeX 数学表达式:
|
|
||||||
|
|
||||||
满足 $\Gamma(n) = (n-1)!\quad\forall n\in\mathbb N$ 的 *Gamma 函数* 是通过欧拉积分
|
|
||||||
|
|
||||||
$$
|
|
||||||
\Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,.
|
|
||||||
$$
|
|
||||||
|
|
||||||
> 您可以在 [这里](http://meta.math.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference) 找到有关 **LaTeX** 数学表达式的更多信息。
|
|
||||||
|
|
||||||
|
|
||||||
## UML 图
|
|
||||||
|
|
||||||
您可以使用 [Mermaid](https://mermaidjs.github.io/) 渲染 UML 图。例如,这将产生一个序列图:
|
|
||||||
|
|
||||||
```mermaid
|
|
||||||
sequenceDiagram
|
|
||||||
爱丽丝 ->> 鲍勃: 你好鲍勃,你好吗?
|
|
||||||
鲍勃-->>约翰: 约翰,你呢?
|
|
||||||
鲍勃--x 爱丽丝: 我很好,谢谢!
|
|
||||||
鲍勃-x 约翰: 我很好,谢谢!
|
|
||||||
Note right of 约翰: 鲍勃想了很长<br/>很长的时间,太长了<br/>文本确实<br/>不能放在一行中。
|
|
||||||
|
|
||||||
鲍勃-->爱丽丝: 正在和 John 核对...
|
|
||||||
爱丽丝->约翰: 是的……约翰,你好吗?
|
|
||||||
```
|
|
||||||
|
|
||||||
这将产生一个流程图:
|
|
||||||
|
|
||||||
```mermaid
|
|
||||||
graph LR
|
|
||||||
A[长方形] -- 链接文本 --> B((圆形))
|
|
||||||
A --> C(圆角矩形)
|
|
||||||
B --> D{菱形}
|
|
||||||
C --> D
|
|
||||||
```
|
|
||||||
<!--stackedit_data:
|
|
||||||
eyJoaXN0b3J5IjpbLTI2OTgwMjY0NF19
|
|
||||||
-->
|
|
@ -1,245 +0,0 @@
|
|||||||

|
|
||||||
## 写在前面
|
|
||||||
本文组织方式:
|
|
||||||
|
|
||||||
1. **K8S的架构、作用和目的。需要首先对K8S整体有所了解。**
|
|
||||||
K8S是什么?
|
|
||||||
为什么是K8S?
|
|
||||||
K8S怎么做?
|
|
||||||
|
|
||||||
1. **K8S的重要概念,即K8S的API对象。要学习和使用K8S必须知道和掌握的几个对象。**
|
|
||||||
Pod 实例
|
|
||||||
Volume 数据卷
|
|
||||||
Container 容器
|
|
||||||
Deployment 和 ReplicaSet
|
|
||||||
Service和Ingress
|
|
||||||
namespace 命名空间
|
|
||||||
其他
|
|
||||||
## I. K8S概览
|
|
||||||
### 1.1 K8S是什么?
|
|
||||||
K8S是[Kubernetes](https://kubernetes.io/zh/docs/concepts/overview/what-is-kubernetes/)的全称,官方称其是:
|
|
||||||
|
|
||||||
> Kubernetes is an open source system for managing [containerized applications](https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/) across multiple hosts. It provides basic mechanisms for deployment, maintenance, and scaling of applications.
|
|
||||||
> 用于自动部署、扩展和管理“容器化(containerized)应用程序”的开源系统。
|
|
||||||
|
|
||||||
翻译成大白话就是:**“K8S是负责自动化运维管理多个Docker程序的集群”。** 那么问题来了:Docker运行可方便了,为什么要用K8S,它有什么优势?
|
|
||||||
插一句题外话:
|
|
||||||
|
|
||||||
- 为什么Kubernetes要叫Kubernetes呢?维基百科已经交代了(老美对星际是真的痴迷):
|
|
||||||
Kubernetes(在希腊语意为“舵手”或“驾驶员”)由Joe Beda、Brendan Burns和Craig
|
|
||||||
McLuckie创立,并由其他谷歌工程师,包括Brian Grant和Tim Hockin等进行加盟创作,并由谷歌在2014年首次对外宣布
|
|
||||||
。该系统的开发和设计都深受谷歌的Borg系统的影响,其许多顶级贡献者之前也是Borg系统的开发者。在谷歌内部,Kubernetes的原始代号曾经是Seven,即星际迷航中的Borg(博格人)。Kubernetes标识中舵轮有七个轮辐就是对该项目代号的致意。
|
|
||||||
- 为什么Kubernetes的缩写是K8S呢?我个人赞同Why Kubernetes is Abbreviated
|
|
||||||
k8s中说的观点“嘛,写全称也太累了吧,不如整个缩写”。其实只保留首位字符,用具体数字来替代省略的字符个数的做法,还是比较常见的。
|
|
||||||
### 1.2 为什么是K8S?
|
|
||||||
试想下传统的后端部署办法:把程序包(包括可执行二进制文件、配置文件等)放到服务器上,接着运行启动脚本把程序跑起来,同时启动守护脚本定期检查程序运行状态、必要的话重新拉起程序。
|
|
||||||
|
|
||||||
有问题吗?显然有!最大的一个问题在于:**如果服务的请求量上来,已部署的服务响应不过来怎么办?** 传统的做法往往是,如果请求量、内存、CPU超过阈值做了告警,运维马上再加几台服务器,部署好服务之后,接入负载均衡来分担已有服务的压力。
|
|
||||||
|
|
||||||
问题出现了:从监控告警到部署服务,中间需要人力介入!那么,**有没有办法自动完成服务的部署、更新、卸载和扩容、缩容呢?**
|
|
||||||
|
|
||||||
**这,就是K8S要做的事情:自动化运维管理Docker(容器化)程序。**
|
|
||||||
|
|
||||||
### 1.3 K8S怎么做?
|
|
||||||
我们已经知道了K8S的核心功能:自动化运维管理多个容器化程序。那么K8S怎么做到的呢?这里,我们从宏观架构上来学习K8S的设计思想。首先看下图,图片来自文章Components of Kubernetes Architecture:
|
|
||||||

|
|
||||||
K8S是属于**主从设备模型(Master-Slave架构)**,即有Master节点负责核心的调度、管理和运维,Slave节点则在执行用户的程序。但是在K8S中,主节点一般被称为**Master Node或者Head Node**(本文采用Master Node称呼方式),而从节点则被称为**Worker Node或者Node**(本文采用Worker Node称呼方式)。
|
|
||||||
|
|
||||||
要注意一点:Master Node和Worker Node是分别安装了K8S的Master和Woker组件的实体服务器,每个Node都对应了一台实体服务器(虽然Master Node可以和其中一个Worker Node安装在同一台服务器,但是建议Master Node单独部署),**所有Master Node和Worker Node组成了K8S集群**,同一个集群可能存在多个Master Node和Worker Node。
|
|
||||||
|
|
||||||
首先来看**Master Node**都有哪些组件:
|
|
||||||
|
|
||||||
- **API Server。K8S的请求入口服务**。API Server负责接收K8S所有请求(来自UI界面或者CLI命令行工具),然后,API
|
|
||||||
Server根据用户的具体请求,去通知其他组件干活。
|
|
||||||
- **Scheduler。K8S所有Worker Node的调度器**。当用户要部署服务时,Scheduler会选择最合适的Worker Node(服务器)来部署。
|
|
||||||
- **Controller Manager。K8S所有Worker Node的监控器**。Controller Manager有很多具体的Controller,在文章Components of Kubernetes Architecture中提到的有Node Controller、Service Controller、Volume Controller等。Controller负责监控和调整在Worker Node上部署的服务的状态,比如用户要求A服务部署2个副本,那么当其中一个服务挂了的时候,Controller会马上调整,让Scheduler再选择一个Worker Node重新部署服务。
|
|
||||||
- **etcd。K8S的存储服务**。etcd存储了K8S的关键配置和用户配置,K8S中仅API Server才具备读写权限,其他组件必须通过API
|
|
||||||
Server的接口才能读写数据(见Kubernetes Works Like an Operating System)。
|
|
||||||
|
|
||||||
接着来看**Worker Node**的组件,笔者更赞同[HOW DO APPLICATIONS RUN ON KUBERNETES](https://thenewstack.io/how-do-applications-run-on-kubernetes/)文章中提到的组件介绍:
|
|
||||||
|
|
||||||
- **Kubelet。Worker Node的监视器,以及与Master Node的通讯器**。Kubelet是Master
|
|
||||||
Node安插在Worker Node上的“眼线”,它会定期向Worker
|
|
||||||
Node汇报自己Node上运行的服务的状态,并接受来自Master Node的指示采取调整措施。
|
|
||||||
- **Kube-Proxy。K8S的网络代理**。私以为称呼为Network-Proxy可能更适合?Kube-Proxy负责Node在K8S的网络通讯、以及对外部网络流量的负载均衡。
|
|
||||||
- **Container Runtime。Worker Node的运行环境**。即安装了容器化所需的软件环境确保容器化程序能够跑起来,比如Docker Engine。大白话就是帮忙装好了Docker运行环境。
|
|
||||||
- **Logging Layer。K8S的监控状态收集器**。私以为称呼为Monitor可能更合适?Logging
|
|
||||||
Layer负责采集Node上所有服务的CPU、内存、磁盘、网络等监控项信息。
|
|
||||||
- **Add-Ons。K8S管理运维Worker Node的插件组件**。有些文章认为Worker
|
|
||||||
Node只有三大组件,不包含Add-On,但笔者认为K8S系统提供了Add-On机制,让用户可以扩展更多定制化功能,是很不错的亮点。
|
|
||||||
|
|
||||||
总结来看,**K8S的Master Node具备:请求入口管理(API Server),Worker Node调度(Scheduler),监控和自动调节(Controller Manager),以及存储功能(etcd);而K8S的Worker Node具备:状态和监控收集(Kubelet),网络和负载均衡(Kube-Proxy)、保障容器化运行环境(Container Runtime)、以及定制化功能(Add-Ons)**。
|
|
||||||
|
|
||||||
## II. K8S重要概念
|
|
||||||
### 2.1 Pod实例
|
|
||||||
官方对于Pod的解释是:
|
|
||||||
|
|
||||||
> Pod是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。
|
|
||||||
|
|
||||||
这样的解释还是很难让人明白究竟Pod是什么,但是对于K8S而言,Pod可以说是所有对象中最重要的概念了!因此,我们**必须首先清楚地知道“Pod是什么”**,再去了解其他的对象。
|
|
||||||
|
|
||||||
从官方给出的定义,联想下“最小的xxx单元”,是不是可以想到本科在学校里学习“进程”的时候,教科书上有一段类似的描述:资源分配的最小单位;还有”线程“的描述是:CPU调度的最小单位。什么意思呢?”**最小xx单位“要么就是事物的衡量标准单位,要么就是资源的闭包、集合**。前者比如长度米、时间秒;后者比如一个”进程“是存储和计算的闭包,一个”线程“是CPU资源(包括寄存器、ALU等)的闭包。
|
|
||||||
|
|
||||||
同样的,**Pod就是K8S中一个服务的闭包**。这么说的好像还是有点玄乎,更加云里雾里了。简单来说,**Pod可以被理解成一群可以共享网络、存储和计算资源的容器化服务的集合**。再打个形象的比喻,在同一个Pod里的几个Docker服务/程序,好像被部署在同一台机器上,可以通过localhost互相访问,并且可以共用Pod里的存储资源(这里是指Docker可以挂载Pod内的数据卷,数据卷的概念,后文会详细讲述,暂时理解为“需要手动mount的磁盘”)。笔者总结Pod如下图,可以看到:**同一个Pod之间的Container可以通过localhost互相访问,并且可以挂载Pod内所有的数据卷;但是不同的Pod之间的Container不能用localhost访问,也不能挂载其他Pod的数据卷**。
|
|
||||||

|
|
||||||
|
|
||||||
对Pod有直观的认识之后,接着来看K8S中Pod究竟长什么样子,具体包括哪些资源?
|
|
||||||
|
|
||||||
K8S中所有的对象都通过yaml来表示,笔者从[官方网站](https://kubernetes.io/zh/docs/tasks/configure-pod-container/assign-memory-resource/)摘录了一个最简单的Pod的yaml:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
apiVersion: v1
|
|
||||||
kind: Pod
|
|
||||||
metadata:
|
|
||||||
name: memory-demo
|
|
||||||
namespace: mem-example
|
|
||||||
spec:
|
|
||||||
containers:
|
|
||||||
- name: memory-demo-ctr
|
|
||||||
image: polinux/stress
|
|
||||||
resources:
|
|
||||||
limits:
|
|
||||||
memory: "200Mi"
|
|
||||||
requests:
|
|
||||||
memory: "100Mi"
|
|
||||||
command: ["stress"]
|
|
||||||
args: ["--vm", "1", "--vm-bytes", "150M", "--vm-hang", "1"]
|
|
||||||
volumeMounts:
|
|
||||||
- name: redis-storage
|
|
||||||
mountPath: /data/redis
|
|
||||||
volumes:
|
|
||||||
- name: redis-storage
|
|
||||||
emptyDir: {}
|
|
||||||
```
|
|
||||||
看不懂不必慌张,且耐心听下面的解释:
|
|
||||||
- apiVersion记录K8S的API Server版本,现在看到的都是v1,用户不用管。
|
|
||||||
- kind记录该yaml的对象,比如这是一份Pod的yaml配置文件,那么值内容就是Pod。
|
|
||||||
- metadata记录了Pod自身的元数据,比如这个Pod的名字、这个Pod属于哪个namespace(命名空间的概念,后文会详述,暂时理解为“同一个命名空间内的对象互相可见”)。
|
|
||||||
- spec记录了Pod内部所有的资源的详细信息,看懂这个很重要:
|
|
||||||
- containers记录了Pod内的容器信息,containers包括了:name容器名,image容器的镜像地址,resources容器需要的CPU、内存、GPU等资源,command容器的入口命令,args容器的入口参数,volumeMounts容器要挂载的Pod数据卷等。可以看到,**上述这些信息都是启动容器的必要和必需的信息。**
|
|
||||||
- volumes记录了Pod内的数据卷信息,后文会详细介绍Pod的数据卷。
|
|
||||||
|
|
||||||
### 2.2 Volume 数据卷
|
|
||||||
K8S支持很多类型的volume数据卷挂载,具体请参见[K8S卷](https://kubernetes.io/zh/docs/concepts/storage/volumes/)。前文就“如何理解volume”提到:“需要手动mount的磁盘”,此外,有一点可以帮助理解:数据卷volume是Pod内部的磁盘资源。
|
|
||||||
|
|
||||||
其实,单单就Volume来说,不难理解。但是上面还看到了volumeMounts,这俩是什么关系呢?
|
|
||||||
|
|
||||||
volume是K8S的对象,对应一个实体的数据卷;而volumeMounts只是container的挂载点,对应container的其中一个参数。但是,volumeMounts依赖于volume,只有当Pod内有volume资源的时候,该Pod内部的container才可能有volumeMounts。
|
|
||||||
|
|
||||||
|
|
||||||
### 2.3 Container 容器
|
|
||||||
本文中提到的镜像Image、容器Container,都指代了Pod下的一个container。关于K8S中的容器,在2.1Pod章节都已经交代了,这里无非再啰嗦一句:**一个Pod内可以有多个容器container**。
|
|
||||||
|
|
||||||
在Pod中,容器也有分类,对这个感兴趣的同学欢迎自行阅读更多资料:
|
|
||||||
|
|
||||||
- **标准容器 Application Container**。
|
|
||||||
- **初始化容器 Init Container**。
|
|
||||||
- **边车容器 Sidecar Container**。
|
|
||||||
- **临时容器 Ephemeral Container**。
|
|
||||||
|
|
||||||
一般来说,我们部署的大多是**标准容器( Application Container)**。
|
|
||||||
|
|
||||||
### 2.4 Deployment 和 ReplicaSet(简称RS)
|
|
||||||
除了Pod之外,K8S中最常听到的另一个对象就是Deployment了。那么,什么是Deployment呢?官方给出了一个要命的解释:
|
|
||||||
|
|
||||||
> 一个 Deployment 控制器为 Pods 和 ReplicaSets 提供声明式的更新能力。 你负责描述 Deployment 中的
|
|
||||||
> 目标状态,而 Deployment 控制器以受控速率更改实际状态, 使其变为期望状态。你可以定义 Deployment 以创建新的
|
|
||||||
> ReplicaSet,或删除现有 Deployment,并通过新的 Deployment 收养其资源。
|
|
||||||
|
|
||||||
翻译一下:**Deployment的作用是管理和控制Pod和ReplicaSet,管控它们运行在用户期望的状态中**。哎,打个形象的比喻,**Deployment就是包工头**,主要负责监督底下的工人Pod干活,确保每时每刻有用户要求数量的Pod在工作。如果一旦发现某个工人Pod不行了,就赶紧新拉一个Pod过来替换它。
|
|
||||||
|
|
||||||
新的问题又来了:那什么是ReplicaSets呢?
|
|
||||||
|
|
||||||
> ReplicaSet 的目的是维护一组在任何时候都处于运行状态的 Pod 副本的稳定集合。 因此,它通常用来保证给定数量的、完全相同的
|
|
||||||
> Pod 的可用性。
|
|
||||||
|
|
||||||
再来翻译下:ReplicaSet的作用就是管理和控制Pod,管控他们好好干活。但是,ReplicaSet受控于Deployment。形象来说,**ReplicaSet就是总包工头手下的小包工头**。
|
|
||||||
|
|
||||||
笔者总结得到下面这幅图,希望能帮助理解:
|
|
||||||

|
|
||||||
新的问题又来了:**如果都是为了管控Pod好好干活,为什么要设置Deployment和ReplicaSet两个层级呢,直接让Deployment来管理不可以吗?**
|
|
||||||
|
|
||||||
回答:不清楚,但是私以为是因为先有ReplicaSet,但是使用中发现ReplicaSet不够满足要求,于是又整了一个Deployment(**有清楚Deployment和ReplicaSet联系和区别的小伙伴欢迎留言啊**)。
|
|
||||||
|
|
||||||
但是,从K8S使用者角度来看,用户会直接操作Deployment部署服务,而当Deployment被部署的时候,K8S会自动生成要求的ReplicaSet和Pod。在[K8S官方文档](https://www.kubernetes.org.cn/replicasets)中也指出用户只需要关心Deployment而不操心ReplicaSet:
|
|
||||||
|
|
||||||
> This actually means that you may never need to manipulate ReplicaSet
|
|
||||||
> objects: use a Deployment instead, and define your application in the
|
|
||||||
> spec section.
|
|
||||||
> 这实际上意味着您可能永远不需要操作ReplicaSet对象:直接使用Deployments并在规范部分定义应用程序。
|
|
||||||
|
|
||||||
补充说明:在K8S中还有一个对象 --- ReplicationController(简称RC),官方文档对它的定义是:
|
|
||||||
|
|
||||||
> ReplicationController 确保在任何时候都有特定数量的 Pod 副本处于运行状态。
|
|
||||||
> 换句话说,ReplicationController 确保一个 Pod 或一组同类的 Pod 总是可用的。
|
|
||||||
|
|
||||||
怎么样,和ReplicaSet是不是很相近?在Deployments, ReplicaSets, and pods教程中说“ReplicationController是ReplicaSet的前身”,官方也推荐用Deployment取代ReplicationController来部署服务。
|
|
||||||
|
|
||||||
### 2.5 Service和Ingress
|
|
||||||
吐槽下K8S的概念/对象/资源是真的多啊!**前文介绍的Deployment、ReplicationController和ReplicaSet主要管控Pod程序服务;那么,Service和Ingress则负责管控Pod网络服务**。
|
|
||||||
|
|
||||||
我们先来看看官方文档中Service的定义:
|
|
||||||
|
|
||||||
> 将运行在一组 [Pods](https://kubernetes.io/docs/concepts/workloads/pods/pod-overview/) 上的应用程序公开为网络服务的抽象方法。 使用 Kubernetes,您无需修改应用程序即可使用不熟悉的服务发现机制。
|
|
||||||
> Kubernetes 为 Pods 提供自己的 IP 地址,并为一组 Pod 提供相同的 DNS 名, 并且可以在它们之间进行负载均衡。
|
|
||||||
|
|
||||||
翻译下:K8S中的服务(Service)并不是我们常说的“服务”的含义,而更像是网关层,是若干个Pod的流量入口、流量均衡器。
|
|
||||||
那么,**为什么要Service呢?**
|
|
||||||
|
|
||||||
私以为在这一点上,[官方文档](https://kubernetes.io/zh/docs/concepts/overview/working-with-objects/namespaces/)讲解地非常清楚:
|
|
||||||
|
|
||||||
> Kubernetes Pod 是有生命周期的。 它们可以被创建,而且销毁之后不会再启动。 如果您使用 Deployment
|
|
||||||
> 来运行您的应用程序,则它可以动态创建和销毁 Pod。 每个 Pod 都有自己的 IP 地址,但是在 Deployment
|
|
||||||
> 中,在同一时刻运行的 Pod 集合可能与稍后运行该应用程序的 Pod 集合不同。 这导致了一个问题: 如果一组
|
|
||||||
> Pod(称为“后端”)为群集内的其他 Pod(称为“前端”)提供功能, 那么前端如何找出并跟踪要连接的 IP
|
|
||||||
> 地址,以便前端可以使用工作量的后端部分?
|
|
||||||
|
|
||||||
补充说明:K8S集群的网络管理和拓扑也有特别的设计,以后会专门出一章节来详细介绍K8S中的网络。这里需要清楚一点:K8S集群内的每一个Pod都有自己的IP(是不是很类似一个Pod就是一台服务器,然而事实上是多个Pod存在于一台服务器上,只不过是K8S做了网络隔离),在K8S集群内部还有DNS等网络服务(一个K8S集群就如同管理了多区域的服务器,可以做复杂的网络拓扑)。
|
|
||||||
|
|
||||||
此外,笔者推荐k8s外网如何访问业务应用对于Service的介绍,不过对于新手而言,推荐阅读前半部分对于service的介绍即可,后半部分就太复杂了。我这里做了简单的总结:
|
|
||||||
|
|
||||||
**Service是K8S服务的核心,屏蔽了服务细节,统一对外暴露服务接口,真正做到了“微服务”**。举个例子,我们的一个服务A,部署了3个备份,也就是3个Pod;对于用户来说,只需要关注一个Service的入口就可以,而不需要操心究竟应该请求哪一个Pod。优势非常明显:**一方面外部用户不需要感知因为Pod上服务的意外崩溃、K8S重新拉起Pod而造成的IP变更,外部用户也不需要感知因升级、变更服务带来的Pod替换而造成的IP变化,另一方面,Service还可以做流量负载均衡**。
|
|
||||||
|
|
||||||
但是,Service主要负责K8S集群内部的网络拓扑。那么集群外部怎么访问集群内部呢?这个时候就需要Ingress了,[官方文档](https://kubernetes.io/zh/docs/concepts/overview/working-with-objects/namespaces/)中的解释是:
|
|
||||||
|
|
||||||
> Ingress 是对集群中服务的外部访问进行管理的 API 对象,典型的访问方式是 HTTP。 Ingress 可以提供负载均衡、SSL
|
|
||||||
> 终结和基于名称的虚拟托管。
|
|
||||||
|
|
||||||
翻译一下:Ingress是整个K8S集群的接入层,复杂集群内外通讯。
|
|
||||||
|
|
||||||
最后,笔者把Ingress和Service的关系绘制网络拓扑关系图如下,希望对理解这两个概念有所帮助:
|
|
||||||

|
|
||||||
### 2.6 namespace 命名空间
|
|
||||||
和前文介绍的所有的概念都不一样,namespace跟Pod没有直接关系,而是K8S另一个维度的对象。或者说,前文提到的概念都是为了服务Pod的,而namespace则是为了服务整个K8S集群的。
|
|
||||||
|
|
||||||
那么,namespace是什么呢?
|
|
||||||
|
|
||||||
上[官方文档](https://kubernetes.io/zh/docs/concepts/overview/working-with-objects/namespaces/)定义:
|
|
||||||
|
|
||||||
> Kubernetes 支持多个虚拟集群,它们底层依赖于同一个物理集群。 这些虚拟集群被称为名字空间。
|
|
||||||
|
|
||||||
翻译一下:**namespace是为了把一个K8S集群划分为若干个资源不可共享的虚拟集群而诞生的。**
|
|
||||||
|
|
||||||
也就是说,**可以通过在K8S集群内创建namespace来分隔资源和对象**。比如我有2个业务A和B,那么我可以创建ns-a和ns-b分别部署业务A和B的服务,如在ns-a中部署了一个deployment,名字是hello,返回用户的是“hello a”;在ns-b中也部署了一个deployment,名字恰巧也是hello,返回用户的是“hello b”(要知道,在同一个namespace下deployment不能同名;但是不同namespace之间没有影响)。前文提到的所有对象,都是在namespace下的;当然,也有一些对象是不隶属于namespace的,而是在K8S集群内全局可见的,官方文档提到的可以通过命令来查看,具体命令的使用办法,笔者会出后续的实战文章来介绍,先贴下命令:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 位于名字空间中的资源
|
|
||||||
kubectl api-resources --namespaced=true
|
|
||||||
|
|
||||||
# 不在名字空间中的资源
|
|
||||||
kubectl api-resources --namespaced=false
|
|
||||||
```
|
|
||||||
不在namespace下的对象有:
|
|
||||||

|
|
||||||
在namespace下的对象有(部分):
|
|
||||||

|
|
||||||
### 2.7 其他
|
|
||||||
K8S的对象实在太多了,2.1-2.6介绍的是在实际使用K8S部署服务最常见的。其他的还有Job、CronJob等等,在对K8S有了比较清楚的认知之后,再去学习更多的K8S对象,不是难事。
|
|
||||||
|
|
||||||
### 写在后面
|
|
||||||
本文是K8S系列文章第一篇,希望能够帮助对K8S不了解的新手快速了解K8S。如果文章中有纰漏,非常欢迎留言或者私信指出;有理解错误的地方,更是欢迎留言或者私信告知。
|
|
||||||
|
|
||||||
笔者一边写文章,一边查阅和整理K8S资料,过程中越发感觉K8S架构的完备、设计的精妙,是值得深入研究的,K8S大受欢迎是有道理的!再次感叹下。
|
|
||||||
<!--stackedit_data:
|
|
||||||
eyJoaXN0b3J5IjpbLTc5ODg4ODk0NF19
|
|
||||||
-->
|
|
@ -1,4 +0,0 @@
|
|||||||
|
|
||||||
<!--stackedit_data:
|
|
||||||
eyJoaXN0b3J5IjpbLTIwODg3NDY2MTJdfQ==
|
|
||||||
-->
|
|
@ -1,23 +0,0 @@
|
|||||||
第三方对接模块拆解分析 - 项目管理库 - 知识库管理平台
|
|
||||||
|
|
||||||
概览
|
|
||||||
|
|
||||||
内容工具
|
|
||||||
|
|
||||||
- 基于 [Atlassian Confluence](http://www.atlassian.com/software/confluence) 7.4.6 技术构建
|
|
||||||
- 由 Atlassian 合流7.4.6 打印
|
|
||||||
- [报告缺陷](https://support.atlassian.com/help/confluence)
|
|
||||||
- [Atlassian 新闻](https://www.atlassian.com/company)
|
|
||||||
|
|
||||||
[Atlassian](http://www.atlassian.com/)
|
|
||||||
|
|
||||||
{"serverDuration": 245, "requestCorrelationId": "e542bb80f0b0e258"}
|
|
||||||
|
|
||||||
## 附加文件
|
|
||||||
|
|
||||||
- Panel 1
|
|
||||||
|
|
||||||
完成
|
|
||||||
<!--stackedit_data:
|
|
||||||
eyJoaXN0b3J5IjpbMjk0OTI0OTldfQ==
|
|
||||||
-->
|
|
75
README.md
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
# knowledge
|
||||||
|
**一、运行截图**
|
||||||
|

|
||||||
|
**二、应收分析**
|
||||||
|
应收,顾名思义,即为应该收入的销售单,应收主要与发票、收款、核销业务高度集成。
|
||||||
|
目前展示的功能为应收单列表,快捷查询应收单;提供申请开票、开票、申请合并开票、合并开票、导出功能。
|
||||||
|
#### 算法
|
||||||
|
|
||||||
|
可开票金额=价税合计-已开票金额-退货金额
|
||||||
|
注:退货金额来源于应收单详情的价税合计*退货数量
|
||||||
|
|
||||||
|
#### 关键业务流程
|
||||||
|
|
||||||
|
1)我的应收
|
||||||
|
基于业务条件,并通过登录用户的工号(empno)到订单表进行查询
|
||||||
|
|
||||||
|
1. 共享应收
|
||||||
|
|
||||||
|
基于业务条件,并通过登录用户的工号(empno)到服务团队人员表(t_crm_serviceman) 通过客户编码(clientcode)跟订单表的客户编码关联查询出t_crm_serviceman 中bill_share_order不等于null (rolecode=负责人时为null)或者shareorder_no(不为不共享=共享->可能为读或者写)或者rolecode=负责人相关订单数据
|
||||||
|
|
||||||
|
1. 我负责的部门应收
|
||||||
|
|
||||||
|
基于业务条件,并通过登录用户的userid查询部门责任信息表(t_crm_deptduty),如果系统设置--部门设置模块中 部门负责人、部门助理、技术支持等配置了则取部门负责人表的信息查询相关应收单数据
|
||||||
|
|
||||||
|
1. 全公司的应收
|
||||||
|
|
||||||
|
基于业务条件直接查询应收单表
|
||||||
|
4)合并开票会验证客户是否被禁用,禁用得客户无法开票
|
||||||
|
|
||||||
|
**三、发票分析**
|
||||||
|
开票业务在应收和订单中集成,销售通过立即开票或者在应收列表点击申请开票,然后助理审核对接到ERP生成发票数据;通过ERP同步到CRM更新发票里面的状态。
|
||||||
|
**关键业务流程**
|
||||||
|

|
||||||
|
#### 算法
|
||||||
|
|
||||||
|
1. 发票状态判断
|
||||||
|
2. 退货金额+开票金额=0、价税合计大于0:等待开票
|
||||||
|
3. 价税合计 = 退货金额或者实际价税合家为0 :关闭;
|
||||||
|
4. 退货金额+开票金额>=订单价税合计:全开票;
|
||||||
|
5. 否则:部分开票
|
||||||
|
6. 当ERP系统里面发票结案状态为"强结案",同步到CRM系统时需要将强结案的发票红冲状态修改为"作废",将目前系统里面发票核销状态显示"已核销"逻辑去除并按原始核销状态的取值逻辑取值;
|
||||||
|
|
||||||
|
**四、收款与核销分析**
|
||||||
|
|
||||||
|
收款业务主要有收款单核销与收款单确认主要用于关联发票与收款单进行核销操作。
|
||||||
|
#### 算法
|
||||||
|
|
||||||
|
涉及算法的位置:点击核销,打开核销详情页面,匹配发票数,筛选相同开票单位且和当前选中的发票未核销金额相等的发票(最多支持同时匹配3条)。
|
||||||
|
注:x=当前发票未核销金额;a=匹配发票未核销金额;b=匹配发票未核销金额;c=匹配发票未核销金额;size=数组长度;i=数组当前下标;minSize=数组最小下标;maxSize=数组最大下标;arr=数组
|
||||||
|
|
||||||
|
1. 匹配数1条
|
||||||
|
|
||||||
|
a=x
|
||||||
|
|
||||||
|
1. 匹配数2条
|
||||||
|
|
||||||
|
a+b=x
|
||||||
|
|
||||||
|
1. 匹配数3条
|
||||||
|
|
||||||
|
a+b+c=x
|
||||||
|
该算法的关键在于去除重复匹配的数据,减少循环层数,提高查询效率。
|
||||||
|
算法核心:固定i,同时前后移动数组进行比较(这里只说明三条匹配的算法,两条是一样的原理)
|
||||||
|
|
||||||
|
1. 当minSize=0且maxSize=0时,minSize=i+1;maxSize=size+1(同时从数组前后进行比比较)
|
||||||
|
2. 当minSize>=size时,i+1且跳出循环(此时说明当次比较已经完成,跳出循环进行下次比较)
|
||||||
|
3. 当minSize>=maxSize时,使maxSize=0,maxSize=0,i+1且跳出循环(此时也说明当次比较完成,跳出循环,将下标进行初始化,当前下标+1进行下一次比较)
|
||||||
|
4. 当a+b+c=x时,使maxSize=0,maxSize=0,i+1且跳出循环,并将arr[i],arr[minSize],arr[maxSize]放入结果中(此时说明满足条件,将结果放入满足条件的集合中,跳出循环进行下一次比较)
|
||||||
|
|
||||||
|
5. 当a+b+c>x时,minSize,i保持不变,maxSize-1,继续进行比较
|
||||||
|
6. 当a+b+c<x时,maxSize,i保持不变,minSize+1,继续进行比较
|
||||||
|
|
||||||
|
#### 关键业务流程
|
||||||
|

|
||||||
|
|
BIN
imgs/2024-02-26/3URTitnY24AiLMAo.png
Normal file
After Width: | Height: | Size: 63 KiB |
BIN
imgs/2024-02-26/6jKSb6yTAQ0tbV7l.png
Normal file
After Width: | Height: | Size: 82 KiB |
BIN
imgs/2024-02-26/6um5BRZTnvZVoAJG.png
Normal file
After Width: | Height: | Size: 291 KiB |
BIN
imgs/2024-02-26/JJQNJxHzK0bfeCcd.png
Normal file
After Width: | Height: | Size: 97 KiB |
BIN
imgs/2024-02-26/JoOO6kJ0nyi07wY2.png
Normal file
After Width: | Height: | Size: 119 KiB |
BIN
imgs/2024-02-26/LPC0C9tERb6GoMlc.png
Normal file
After Width: | Height: | Size: 39 KiB |
BIN
imgs/2024-02-26/MB4dmiMkF7TpxPCk.png
Normal file
After Width: | Height: | Size: 110 KiB |
BIN
imgs/2024-02-26/MgjDbMxT80rCcooo.png
Normal file
After Width: | Height: | Size: 98 KiB |
BIN
imgs/2024-02-26/MnlsWA3dx53vrb9R.png
Normal file
After Width: | Height: | Size: 55 KiB |
BIN
imgs/2024-02-26/NjYsBWQFIP65rU4j.png
Normal file
After Width: | Height: | Size: 288 KiB |
BIN
imgs/2024-02-26/cClv3SOuY1urVvZ3.png
Normal file
After Width: | Height: | Size: 61 KiB |
BIN
imgs/2024-02-26/cnSNuRM7QVSsljxS.png
Normal file
After Width: | Height: | Size: 72 KiB |
BIN
imgs/2024-02-26/d3yyayaHpB9LMExf.png
Normal file
After Width: | Height: | Size: 45 KiB |
BIN
imgs/2024-02-26/ikb68J8TnjxnFA2y.png
Normal file
After Width: | Height: | Size: 119 KiB |
BIN
imgs/2024-02-26/ilrH3CZk16Qy5tam.png
Normal file
After Width: | Height: | Size: 73 KiB |
BIN
imgs/2024-02-26/kHi8eAVkh24sgscN.png
Normal file
After Width: | Height: | Size: 73 KiB |
BIN
imgs/2024-02-26/moRY6HofxIM2mRUy.png
Normal file
After Width: | Height: | Size: 73 KiB |
BIN
imgs/2024-02-26/sKcVPGrNUG6UvoOJ.png
Normal file
After Width: | Height: | Size: 31 KiB |
BIN
imgs/2024-02-26/t5WiMJ7apx7JQy6B.png
Normal file
After Width: | Height: | Size: 120 KiB |
BIN
imgs/2024-02-26/thGJ96gfY2okf3pu.png
Normal file
After Width: | Height: | Size: 97 KiB |
BIN
imgs/2024-02-26/zEMchSXOG3lTAz26.jpeg
Normal file
After Width: | Height: | Size: 10 MiB |
BIN
imgs/2024-02-27/71g9Qgf3jtZsyCrQ.png
Normal file
After Width: | Height: | Size: 49 KiB |
BIN
imgs/2024-02-27/7sqmTbmpxy34zmov.png
Normal file
After Width: | Height: | Size: 342 KiB |
BIN
imgs/2024-02-27/CKNsdg9rfWclxFk9.png
Normal file
After Width: | Height: | Size: 112 KiB |
BIN
imgs/2024-02-27/QyRs49i3AeCiLNFZ.png
Normal file
After Width: | Height: | Size: 152 KiB |
BIN
imgs/2024-02-27/RnjU9oeMNrbnuW8D.png
Normal file
After Width: | Height: | Size: 182 KiB |
BIN
imgs/2024-02-27/cnUA59X1TPOxE261.png
Normal file
After Width: | Height: | Size: 182 KiB |
BIN
imgs/2024-02-27/f7Al9AOfDe2A9pHM.png
Normal file
After Width: | Height: | Size: 324 KiB |
BIN
imgs/2024-02-27/wsn4xzDe1iBlUsty.png
Normal file
After Width: | Height: | Size: 460 B |
BIN
imgs/2024-02-27/zpHvCHwJ5GU4esVw.png
Normal file
After Width: | Height: | Size: 305 KiB |
BIN
imgs/2024-02-28/03uSjJrIrw3wzw0X.png
Normal file
After Width: | Height: | Size: 653 KiB |
BIN
imgs/2024-02-28/DiguuOGqfdiAHTnb.png
Normal file
After Width: | Height: | Size: 1016 KiB |
BIN
imgs/2024-02-28/YswKfdoOLsXfxAju.png
Normal file
After Width: | Height: | Size: 1.2 MiB |
BIN
imgs/2024-02-28/muLarKusi9w2x97Z.png
Normal file
After Width: | Height: | Size: 1.1 MiB |
BIN
imgs/2024-02-28/staroMEM0FKPsuHZ.png
Normal file
After Width: | Height: | Size: 951 KiB |
BIN
imgs/2024-02-28/tCKpGNs0PIVv4L1s.png
Normal file
After Width: | Height: | Size: 880 KiB |
BIN
imgs/2024-03-03/6UX41Kuc0eBLGLZF.png
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
imgs/2024-03-03/Ay6LSMoXL2jf6Por.png
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
imgs/2024-03-03/Wo6h0lxrHFa1a9Zq.png
Normal file
After Width: | Height: | Size: 35 KiB |
BIN
imgs/2024-03-03/aL2LCHcMpVHv1l09.png
Normal file
After Width: | Height: | Size: 34 KiB |
BIN
imgs/2024-03-03/grgp6jJe0zpKv8HC.png
Normal file
After Width: | Height: | Size: 28 KiB |
BIN
imgs/2024-03-03/herwI0jA4lpLq9Nx.png
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
imgs/2024-03-03/vLtTXGkVk7mMIr3O.png
Normal file
After Width: | Height: | Size: 80 KiB |
BIN
imgs/2024-03-03/xPZPzsqtI4q8wCE5.png
Normal file
After Width: | Height: | Size: 50 KiB |
BIN
imgs/2024-03-04/HVoCHBGtzM3aH5wz.png
Normal file
After Width: | Height: | Size: 300 KiB |
BIN
imgs/2024-03-04/kPcGWb3L09TNVKLi.png
Normal file
After Width: | Height: | Size: 300 KiB |
3868
历史知识库访问索引.md
Normal file
265
技术知识库/技术文档/数据/ETL工具DataX与DataX-Web的安装部署与应用.md
Normal file
@ -0,0 +1,265 @@
|
|||||||
|
|
||||||
|
|
||||||
|
auth: 高佳、韩健
|
||||||
|
**(一) 术语介绍**
|
||||||
|
DataX是一个开源的数据同步工具,而DataX-Web是构建在DataX之上的分布式数据同步工具,提供了可视化的操作界面。具体来说:
|
||||||
|
|
||||||
|
- **DataX**:DataX的主要作用是实现不同数据源之间的离线数据同步,它支持包括关系型数据库(例如MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等多种异构数据源之间的稳定高效的数据迁移工作。DataX通过提供命令行工具和JSON配置文件的方式来执行数据同步任务,但这种方式在管理和多任务处理上存在一定的局限性。
|
||||||
|
- **DataX-Web**:为了解决DataX在使用过程中的配置复杂性以及管理上的不便捷,DataX-Web应运而生。DataX-Web提供了一个简单易用的操作界面,降低了用户使用DataX的学习成本,并缩短了任务配置时间。此外,它还避免了配置过程中可能出现的错误,并支持远程分布式调用DataX的功能,使得多节点之间的协作变得更加容易控制。
|
||||||
|
|
||||||
|
总的来说,DataX适用于需要进行大规模数据迁移的场景,而DataX-Web则更适合需要简化操作流程和提升任务管理效率的用户。两者结合使用,可以有效提升数据处理的效率和便捷性。
|
||||||
|
|
||||||
|
**(二)工具安装**
|
||||||
|
一、下载tar包
|
||||||
|
github地址:https://github.com/alibaba/DataX
|
||||||
|
下载tar包地址:http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz
|
||||||
|
|
||||||
|
二、上传tar包解压并安装
|
||||||
|
上传至服务器/opt/下并解压
|
||||||
|
tar -xzvf datax.tar.gz
|
||||||
|

|
||||||
|
|
||||||
|
三、上传解压 dataX-web
|
||||||
|
链接: [https://pan.baidu.com/s/1B8bb_KeyIYvpbI5s3IwCjA](https://pan.baidu.com/s/1B8bb_KeyIYvpbI5s3IwCjA) 提取码: 3pah
|
||||||
|
上传压缩包至服务目录,这里我上传到/usr/local/下,具体可根据自身希望上传到哪个目录就行
|
||||||
|
unzip datax-web-2.1.2.zip
|
||||||
|
|
||||||
|
四、创建datax-web数据库
|
||||||
|
sql文件在以下目录
|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
|
五、修改配置文件
|
||||||
|
1.修改数据库连接
|
||||||
|
modules下的datax-admin下的conf下的bootstrap.properties
|
||||||
|

|
||||||
|
|
||||||
|
2.注意datax-executor下的bin下的env.properties的PYTOHON_PATH的配置地址,需与我们安装的datax目录一致
|
||||||
|

|
||||||
|
|
||||||
|
六、启动datax-web及访问
|
||||||
|
执行datax-web-2.1.2下的bin下的start-all.sh启动所有模块
|
||||||
|

|
||||||
|
|
||||||
|
访问:http://服务器IP:9527/index.html#/dashboard
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
七、实际安装过程中可能会遇到的问题
|
||||||
|
1.解决Oracle没有dba权限查询用户和表失败问题
|
||||||
|
getSQLQueryTables方法sql中的dba_tables修改为all_tables。
|
||||||
|
getSQLQueryTableSchema方法sql中的dba_users修改为all_users。
|
||||||
|
通过下载源码后修改指定方法,打包jar后替换datax-admin下的lib下的datax-web-2.1.2.jar
|
||||||
|
|
||||||
|
2.解决datax写数据至db2数据库
|
||||||
|
datax暂时没有独立插件支持db2,需要使用通用RDBMS;这里是写入db2,使用rdbmswriter,对应目录为/datax/plugin/writer/rdbmswriter/
|
||||||
|
修改该目录下的plugin.json,注册数据库驱动
|
||||||
|
{
|
||||||
|
"name": "rdbmswriter",
|
||||||
|
"class": "com.alibaba.datax.plugin.reader.rdbmswriter.RdbmsWriter",
|
||||||
|
"description": "useScene: prod. mechanism: Jdbc connection using the database, execute select sql, retrieve data from the ResultSet. warn: The more you know about the database, the less problems you encounter.",
|
||||||
|
"developer": "alibaba",
|
||||||
|
"drivers":["com.ibm.db2.jcc.DB2Driver"]
|
||||||
|
}
|
||||||
|
上传db2驱动到该目录下的libs,如图所示
|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
|
job文件都放在/datax/job目录
|
||||||
|
创建需要执行的job的json文件
|
||||||
|

|
||||||
|
|
||||||
|
执行任务命令
|
||||||
|
python /opt/datax/bin/datax.py /opt/datax/job/xx.json
|
||||||
|
|
||||||
|
**(三) 实际应用**
|
||||||
|
如下为实际应用示例
|
||||||
|
3.1 如何新增任务
|
||||||
|
第1步首先进行任务构建,获取datax同步任务脚本,选择任务构建配置数据读取源信息。
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
第2步配置数据写入源,前置sql语句代表执行同步前会执行的sql,例如全量同步前,对数据库清空,则在前置sql写入删除全表数据语句。
|
||||||
|

|
||||||
|
|
||||||
|
第3步 选择同步表的字段映射,比对字段数量与字段是否一致。
|
||||||
|

|
||||||
|
|
||||||
|
第4步点击【构建】生成datax同步任务脚本,点击【复制json】后进入任务管理。
|
||||||
|

|
||||||
|
|
||||||
|
第5步进入任务管理,新增任务,执行器选择【datax执行器】,路由策略选择【轮询】,阻塞策略选择【丢弃后续调度】,任务类型选择【DataX任务】,将复制的datax任务脚本粘贴在下方的代码框内,选择所属项目,输入任务名称和配置定时触发表达式点击【确定】则完成任务的创建。
|
||||||
|

|
||||||
|
|
||||||
|
第6步任务创建完后,默认不会启动,需要点击按钮开关进行任务的启动,启动前可手动执行一次确认任务触发的逻辑和内容无误,再开启定时调度。
|
||||||
|

|
||||||
|
|
||||||
|
注意事项:以上创建的任务为全量同步模式,且如果目标表没进行数据清空,会存在主键冲突脏数据报错,需要调整脚本写入模式为update,这样同步会对重复数据按主键进行更新,前提为同步的表必须存在主键字段。
|
||||||
|
|
||||||
|
3.2 如何增量同步数据
|
||||||
|
在任务构建时,配置where条件,筛选条件内的数据,例如筛选2天内数据进行同步迁移(注意事项:需保证写入源的写入模式是update,"writeMode": "update")
|
||||||
|

|
||||||
|
已创建的任务,可对任务进行编辑,在下方的脚本中增加where条件和writeMode写入模式。
|
||||||
|

|
||||||
|
|
||||||
|
3.2 全量数据同步json配置示例【注意:同步数据前,会删除目标表的全部数据】
|
||||||
|
{
|
||||||
|
"job": {
|
||||||
|
"setting": {
|
||||||
|
"speed": {
|
||||||
|
"channel": 3,
|
||||||
|
"byte": 1048576
|
||||||
|
},
|
||||||
|
"errorLimit": {
|
||||||
|
"record": 0,
|
||||||
|
"percentage": 0.02
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"content": [
|
||||||
|
{
|
||||||
|
"reader": {
|
||||||
|
"name": "oraclereader",
|
||||||
|
"parameter": {
|
||||||
|
"username": "qJFt0d+pL7uQPs57rbfG/Q==",
|
||||||
|
"password": "DjjcIe3E9n71mmKvI55MtA==",
|
||||||
|
"column": [
|
||||||
|
"\"PAPER_ID\"",
|
||||||
|
"\"AUTH_OBJECT\"",
|
||||||
|
"\"OBJECT_TYPE\"",
|
||||||
|
"\"AUTH_VALUE\""
|
||||||
|
],
|
||||||
|
"splitPk": "",
|
||||||
|
"connection": [
|
||||||
|
{
|
||||||
|
"table": [
|
||||||
|
"T_CMS_D_PAPER_AUTH"
|
||||||
|
],
|
||||||
|
"jdbcUrl": [
|
||||||
|
"jdbc:oracle:thin:@//10.158.xxx.xxx:1521/wportal"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"writer": {
|
||||||
|
"name": "mysqlwriter",
|
||||||
|
"parameter": {
|
||||||
|
"writeMode": "update",
|
||||||
|
"username": "TUiXezDzJBqHeHh+D2YEKA==",
|
||||||
|
"password": "E2+aeKRFsyypelKNid/dYP+cUf7U/tFGQFV59oIG608=",
|
||||||
|
"column": [
|
||||||
|
"`PAPER_ID`",
|
||||||
|
"`AUTH_OBJECT`",
|
||||||
|
"`OBJECT_TYPE`",
|
||||||
|
"`AUTH_VALUE`"
|
||||||
|
],
|
||||||
|
"preSql": [
|
||||||
|
"truncate table t_cms_d_paper_auth"
|
||||||
|
],
|
||||||
|
"connection": [
|
||||||
|
{
|
||||||
|
"table": [
|
||||||
|
"t_cms_d_paper_auth"
|
||||||
|
],
|
||||||
|
"jdbcUrl": "jdbc:mysql://172.28.xxx.xxx:3306/cz_doc"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
3.3 增量数据同步json配置示例
|
||||||
|
{
|
||||||
|
"job": {
|
||||||
|
"setting": {
|
||||||
|
"speed": {
|
||||||
|
"channel": 3,
|
||||||
|
"byte": 1048576
|
||||||
|
},
|
||||||
|
"errorLimit": {
|
||||||
|
"record": 0,
|
||||||
|
"percentage": 0.02
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"content": [
|
||||||
|
{
|
||||||
|
"reader": {
|
||||||
|
"name": "oraclereader",
|
||||||
|
"parameter": {
|
||||||
|
"username": "qJFt0d+pL7uQPs57rbfG/Q==",
|
||||||
|
"password": "DjjcIe3E9n71mmKvI55MtA==",
|
||||||
|
"column": [
|
||||||
|
"\"FILE_ID\"",
|
||||||
|
"\"FILENAME\"",
|
||||||
|
"\"FILE_PATH\"",
|
||||||
|
"\"FILE_SIZE\"",
|
||||||
|
"\"FILE_FORMAT\"",
|
||||||
|
"\"FILE_MD5\"",
|
||||||
|
"\"APP_ID\"",
|
||||||
|
"\"CREATE_DATE\"",
|
||||||
|
"\"UPDATE_DATE\"",
|
||||||
|
"\"DELETE_FLAG\"",
|
||||||
|
"\"DELETE_DATE\"",
|
||||||
|
"\"BIGDATA_FILE_ID\"",
|
||||||
|
"\"LABEL_NAME\"",
|
||||||
|
"\"IS_UPLOAD\""
|
||||||
|
],
|
||||||
|
"where": "TO_CHAR(create_date,'yyyy-MM-dd HH24:mi:ss') > TO_CHAR(TO_DATE(SYSDATE - 3),'yyyy-MM-dd HH24:mi:ss')",
|
||||||
|
"splitPk": "",
|
||||||
|
"connection": [
|
||||||
|
{
|
||||||
|
"table": [
|
||||||
|
"T_FILE"
|
||||||
|
],
|
||||||
|
"jdbcUrl": [
|
||||||
|
"jdbc:oracle:thin:@//10.158.xxx.xxx:1521/wportal"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"writer": {
|
||||||
|
"name": "mysqlwriter",
|
||||||
|
"parameter": {
|
||||||
|
"writeMode": "update",
|
||||||
|
"username": "TUiXezDzJBqHeHh+D2YEKA==",
|
||||||
|
"password": "E2+aeKRFsyypelKNid/dYP+cUf7U/tFGQFV59oIG608=",
|
||||||
|
"column": [
|
||||||
|
"`FILE_ID`",
|
||||||
|
"`FILENAME`",
|
||||||
|
"`FILE_PATH`",
|
||||||
|
"`FILE_SIZE`",
|
||||||
|
"`FILE_FORMAT`",
|
||||||
|
"`FILE_MD5`",
|
||||||
|
"`APP_ID`",
|
||||||
|
"`CREATE_DATE`",
|
||||||
|
"`UPDATE_DATE`",
|
||||||
|
"`DELETE_FLAG`",
|
||||||
|
"`DELETE_DATE`",
|
||||||
|
"`BIGDATA_FILE_ID`",
|
||||||
|
"`LABEL_NAME`",
|
||||||
|
"`IS_UPLOAD`"
|
||||||
|
],
|
||||||
|
"connection": [
|
||||||
|
{
|
||||||
|
"table": [
|
||||||
|
"t_file"
|
||||||
|
],
|
||||||
|
"jdbcUrl": "jdbc:mysql://172.28.xxx.xxx:3306/cz_doc"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
可通过where 语句,设定同步几天之内的数据。
|
||||||
|
|
||||||
|
全文结束。如您还有疑问,可联系高佳18627548877,获取进一步的指导。
|
||||||
|
<!--stackedit_data:
|
||||||
|
eyJoaXN0b3J5IjpbLTE0NTc1MDMzODUsLTk1NzE5MjI3OV19
|
||||||
|
-->
|
@ -1,15 +1,11 @@
|
|||||||
## **一、代码运行截图**
|
## **一、代码运行截图**
|
||||||

|
|
||||||

|
|
||||||
|
|
||||||
")
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
## **二、接口说明**
|
## **二、接口说明**
|
||||||
|
|
||||||
- ### Controller层
|
- ### Controller层
|
||||||
-  "项目管理库 > 业务模块-活动服务 > image2024-2-17_14-51-29.png")
|
- "项目管理库 > 业务模块-活动服务 > image2024-2-17_14-51-29.png")
|
||||||
|
|
||||||
## **二、接口说明**
|
## **二、接口说明**
|
||||||
|
|
||||||
@ -152,8 +148,9 @@ CouponController
|
|||||||
## **四、数据库**
|
## **四、数据库**
|
||||||
|
|
||||||
**主要表截图如下:**
|
**主要表截图如下:**
|
||||||

|
|
||||||
** "项目管理库 > 业务模块-活动服务 > image2024-2-17_15-5-18.png")**
|
** "项目管理库 > 业务模块-活动服务 > image2024-2-17_15-5-18.png")**
|
||||||
<!--stackedit_data:
|
<!--stackedit_data:
|
||||||
eyJoaXN0b3J5IjpbLTIwOTczMTcxNjFdfQ==
|
eyJoaXN0b3J5IjpbLTE3MjA2MTg0ODAsLTIwOTczMTcxNjFdfQ
|
||||||
|
==
|
||||||
-->
|
-->
|
200
项目管理库/诺唯赞CRM项目/CRM模块拆解分析/合同服务拆解分析2.md
Normal file
@ -0,0 +1,200 @@
|
|||||||
|
# 合同服务拆解分析2
|
||||||
|
## 一、功能描述
|
||||||
|
主要是针对销售合同、其它合同的管理,可以从不同的维度查询与管理相关合同信息,销售合同包含我的合同、我负责部门合同、我负责的合同、全公司的合同、服务合同、海外合同;其他合同包含我的合同、我负责部门合同、我负责的合同、全公司的合同。
|
||||||
|
## **二、代码运行截图**
|
||||||
|
|
||||||
|
|
||||||
|
## **三、核心接口说明**
|
||||||
|
<table >
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td >类地址</td>
|
||||||
|
<td >类名</td>
|
||||||
|
<td >类说明</td>
|
||||||
|
<td >请求方式</td>
|
||||||
|
<td >方法地址</td>
|
||||||
|
<td >方法名</td>
|
||||||
|
<td >方法说明</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td rowspan="13" >/api/contract</td>
|
||||||
|
<td rowspan="13" >ContractRest</td>
|
||||||
|
<td rowspan="13" ></td>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/archived</td>
|
||||||
|
<td >archivedContract</td>
|
||||||
|
<td >合同归档</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/backtoprev</td>
|
||||||
|
<td >backtoprev</td>
|
||||||
|
<td >退回上一步</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/saveContractFrame</td>
|
||||||
|
<td >saveContractFrame</td>
|
||||||
|
<td >提交合同</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/section</td>
|
||||||
|
<td >section</td>
|
||||||
|
<td >暂存合同</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/updateById</td>
|
||||||
|
<td >updateById</td>
|
||||||
|
<td >修改合同</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/deletecontract</td>
|
||||||
|
<td >deletecontract</td>
|
||||||
|
<td >删除暂存合同</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/getContract/{conCode}</td>
|
||||||
|
<td >getContract</td>
|
||||||
|
<td >查询合同详情</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/listcontract</td>
|
||||||
|
<td >listcontract</td>
|
||||||
|
<td >查询合同列表(PC高级查询)</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/listcontract4Mobile</td>
|
||||||
|
<td >listcontract4Mobile</td>
|
||||||
|
<td >查询合同列表(APP)</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/electronicContract</td>
|
||||||
|
<td >electronicContract</td>
|
||||||
|
<td >生成电子合同</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/contractExp</td>
|
||||||
|
<td >contractExp</td>
|
||||||
|
<td >合同导出</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/print/{conType}/td>
|
||||||
|
<td >print</td>
|
||||||
|
<td >合同打印</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/serveFlowSubmit</td>
|
||||||
|
<td >serveFlowSubmit</td>
|
||||||
|
<td >服务审批流程</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td rowspan="14" >/api/contractOther</td>
|
||||||
|
<td rowspan="14" >ContractetOtherController</td>
|
||||||
|
<td rowspan="14" >其他合同相关</td>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/archive</td>
|
||||||
|
<td >archive</td>
|
||||||
|
<td >其他合同归档</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/backtoprev</td>
|
||||||
|
<td >backtoprev</td>
|
||||||
|
<td >退回上一步</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/closeContractOther</td>
|
||||||
|
<td >closeContractOther</td>
|
||||||
|
<td >关闭其他合同</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/contractOtherApprove</td>
|
||||||
|
<td >contractOtherApprove</td>
|
||||||
|
<td >保存其他合同并发起流程</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/delete/{id}</td>
|
||||||
|
<td >delete</td>
|
||||||
|
<td >根据id删除其他合同</td>
|
||||||
|
</tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/fillStamp</td>
|
||||||
|
<td >fillStamp</td>
|
||||||
|
<td >其他合同补盖章</tdlta</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/get/{id}</td>
|
||||||
|
<td >get</td>
|
||||||
|
<td >根据id获取其他合同详情</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/getByCode</td>
|
||||||
|
<td >getByCode</td>
|
||||||
|
<td >根据合同编号其他合同</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/getSealcodeList</td>
|
||||||
|
<td >getSealcodeList</td>
|
||||||
|
<td >获取盖章列表</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/pageList</td>
|
||||||
|
<td >pageList</td>
|
||||||
|
<td >条件查询其他合同列表数据(PC)</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/pageListMobile</td>
|
||||||
|
<td >pageListMobile</td>
|
||||||
|
<td >条件查询其他合同列表数据(APP)</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/section</td>
|
||||||
|
<td >section</td>
|
||||||
|
<td >暂存其他合同</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/updateById</td>
|
||||||
|
<td >updateById</td>
|
||||||
|
<td >根据id修改其他合同</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/updateContentByCode</td>
|
||||||
|
<td >updateContentByCode</td>
|
||||||
|
<td >根据合同编号修改合同内容</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
## **四、数据库**
|
||||||
|
|
||||||
|
****主要表截图如下:****
|
||||||
|

|
||||||
|
<!--stackedit_data:
|
||||||
|
eyJoaXN0b3J5IjpbNDA2NjUyNTc5LC01MTEyOTM0NzksMzE5ND
|
||||||
|
A0Mjk1LDU3NDYwNjY2LDk1ODYwNjk1MSwzNTEwNzEwMSwyMTM3
|
||||||
|
MzkxNzcwLC0xNzgyODM3NDYyLDE3MTY5MDAwMTYsNjk2MjM0ND
|
||||||
|
Y0LDE0NDc5NTUwMzEsNDIyMTQyNTAsMTQ0OTEyMzA4NywtNzY3
|
||||||
|
NTkwNDE4LC0xMTg0NDc5NTM5LDU5MDI4NDY1NSwtMTQ0NzY4Nz
|
||||||
|
gxLDE5MDQyNDk4NDEsMTQ4MDIxMDc2MCwxOTYzMzA3OV19
|
||||||
|
-->
|
145
项目管理库/诺唯赞CRM项目/CRM模块拆解分析/国际化组件.md
Normal file
@ -0,0 +1,145 @@
|
|||||||
|
## 一、功能描述
|
||||||
|
|
||||||
|
提供前后端在请求中得国别进行对应语言的渲染 将国际化语言持久化到mysql提供实时管理,缓存到redis 提供服务模块的快速加载 前端通过api加载完成页面国际化;后端通过redis 快速加载,通过字典注解、工具类完成列表查询内容国际化。
|
||||||
|
## 二、代码运行截图:
|
||||||
|

|
||||||
|
## 三、使用方法
|
||||||
|
1. 以嵌入当前工1. 方式引入在当前 springboot 工程引入 组件包
|
||||||
|
``` xml
|
||||||
|
|
||||||
|
这里输入代码 <dependency>
|
||||||
|
<groupId>net.rzdata</groupId>
|
||||||
|
<artifactId>rz-i18n</artifactId>
|
||||||
|
<version>0.0.2-SNAPSHOT</version>
|
||||||
|
</dependency>
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
3. 组件包扫描包
|
||||||
|
|
||||||
|
``` java
|
||||||
|
@ComponentScan(basePackages = {"org.example","com.blueland"})
|
||||||
|
@MapperScan(basePackages = {"org.example","com.blueland.common.core.mapper"})
|
||||||
|
@EnableAutoConfiguration
|
||||||
|
public class App {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
SpringApplication.run(App.class, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
```
|
||||||
|
4. 增加配置文件 application.yml
|
||||||
|
|
||||||
|
``` yml
|
||||||
|
server:
|
||||||
|
port: 8080
|
||||||
|
servlet:
|
||||||
|
context-path: /crm-internation
|
||||||
|
session:
|
||||||
|
cookie:
|
||||||
|
name: crm-internation
|
||||||
|
|
||||||
|
spring:
|
||||||
|
datasource:
|
||||||
|
type: com.alibaba.druid.pool.DruidDataSource
|
||||||
|
druid:
|
||||||
|
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||||
|
username: crm
|
||||||
|
password: crm@123
|
||||||
|
url: jdbc:mysql://192.168.1.13:3308/crm_usm?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
|
||||||
|
redis:
|
||||||
|
database: 9
|
||||||
|
host: 192.168.1.169
|
||||||
|
password: ''
|
||||||
|
tm:
|
||||||
|
secretId: AKID4IXccMhHdjcJm0wqPjndHhspkbDbGeJz
|
||||||
|
secretKey: aw3v5B3h8OPQO7j8JPGsFNHwMXTAcprf
|
||||||
|
|
||||||
|
logging:
|
||||||
|
level:
|
||||||
|
com.blueland.common.core: debug
|
||||||
|
mybatis-flex:
|
||||||
|
type-aliases-package: com.blueland.common.core.domain
|
||||||
|
|
||||||
|
|
||||||
|
knife4j:
|
||||||
|
enable: true
|
||||||
|
openapi:
|
||||||
|
title: 国际化接口文档
|
||||||
|
group:
|
||||||
|
test1:
|
||||||
|
group-name: 国际化
|
||||||
|
api-rule: package
|
||||||
|
api-rule-resources:
|
||||||
|
- com.blueland.common.core.controller
|
||||||
|
```
|
||||||
|
5. 创建数据库表:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CREATE TABLE `t_international` (
|
||||||
|
`id` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '唯一ID',
|
||||||
|
`code` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '国际化编码',
|
||||||
|
`name` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '名称',
|
||||||
|
`lang` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '语言',
|
||||||
|
`type` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '标识(前端:front,后端:back)',
|
||||||
|
`tenant_id` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '租户号',
|
||||||
|
`create_by` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '创建人',
|
||||||
|
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||||
|
`update_by` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '更新人',
|
||||||
|
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||||
|
KEY `idx_code` (`code`) USING BTREE
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='国际化';
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 运行截图:
|
||||||
|
访问接口文档:
|
||||||
|
请求接口:
|
||||||
|

|
||||||
|

|
||||||
|
#### 前端接入:
|
||||||
|

|
||||||
|

|
||||||
|
请求前端接口:**GET** /crm-internation/international/findLangPackage header: tenantid:MID 参数: type:front
|
||||||
|
|
||||||
|
|
||||||
|
#### 后端接入:
|
||||||
|
输入图片说明
|
||||||
|

|
||||||
|
解析code
|
||||||
|
``` java
|
||||||
|
MessageSendUtil.send(receiveStaffCode, I18nUtils.getTitle("product.gift_send_notice"),
|
||||||
|
CommonConstant.MESSAGE_TYPE_QYWX, I18nUtils.getTitleFormat(ProductI18nConstant.PRODUCT_GIFT_AUDIT_MSG, stockingApply.getCreateName()),
|
||||||
|
CommonConstant.MESSAGE_CREATEBY_CRM, UserUtils.getTenantId(), stockingApply.getApplyCode());
|
||||||
|
```
|
||||||
|
getTitle:
|
||||||
|
``` java
|
||||||
|
public static String getTitle(String code) {
|
||||||
|
International international = getByCode(code, "back");
|
||||||
|
return ObjectUtil.isNull(international) ? code : international.getName();
|
||||||
|
}
|
||||||
|
```
|
||||||
|
从redis获取内容
|
||||||
|
``` java
|
||||||
|
private static International getByCode(String code, String type) {
|
||||||
|
return (International)REDIS_UTILS.hget(getRedisKey(), getHashKey(code, type), International.class);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
请求前端接口:**GET** /crm-internation/international/findLangPackage header: tenantid:MID 参数: type:back
|
||||||
|
|
||||||
|
|
||||||
|
<!--stackedit_data:
|
||||||
|
eyJoaXN0b3J5IjpbLTE5NTMxNDExMzksMzYzOTk5OTMxLDExNT
|
||||||
|
YzNzg2MzIsLTEyMjcxMTI2MDUsMTMzMTgxNjA4MCwxMzA4MTk1
|
||||||
|
OTI5LC0xMjM5MDg2OTA4LC01MDM2MzI4NzgsMTU4MzkyMDk3NS
|
||||||
|
w4MDc5MzM3MDUsMTI1NDg0NTM4MiwtNTM1NTg4MTM2LDE5ODA2
|
||||||
|
MzU5OTEsMTM0MTIzMDk1NF19
|
||||||
|
-->
|
@ -1,28 +1,23 @@
|
|||||||
### 一、功能描述
|
### 一、功能描述
|
||||||
|
### 二、代码运行截图
|
||||||
|

|
||||||
### 二、代码运行截图
|
|
||||||

|
|
||||||
### 三、核心逻辑
|
### 三、核心逻辑
|
||||||
|
|
||||||
|
|
||||||
### 四、数据库设计
|
### 四、数据库设计
|
||||||
|
!输图片说明](https://git.rzdata.net/rzdata/knowledge-image/raw/branch/master/imgs/2024-02-28/iYgjbFrBMbm5ECLFDiguuOGqfdiAHTnb.png)
|
||||||

|
|
||||||
### 五、接口说明
|
### 五、接口说明
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<th colspan="8">CRM客户服务接口说明</th>
|
<th colspan="8">CRM客户服务接口说明</th>
|
||||||
</tr >
|
</tr >
|
||||||
<tr>
|
<tr>
|
||||||
<td>类地址</td>
|
<td类地址</td>
|
||||||
<td>类名</td>
|
<td>类名</td>
|
||||||
<td>类说明</td>
|
<td>类说明</td>
|
||||||
<td>序号</td>
|
<td>序号</td>
|
||||||
<td>请求方式</td>
|
<td>请求方式</td>
|
||||||
<td>方法地址</td>
|
<td>方法地址</td>
|
||||||
<td>方法名</td>
|
<td方法名</td>
|
||||||
<td>方法说明</td>
|
<td>方法说明</td>
|
||||||
</tr >
|
</tr >
|
||||||
<tr >
|
<tr >
|
||||||
@ -38,7 +33,7 @@
|
|||||||
<tr >
|
<tr >
|
||||||
<td>2</td>
|
<td>2</td>
|
||||||
<td>POST</td>
|
<td>POST</td>
|
||||||
<td>/batchSureShortname</td>
|
<td>batchSureShortname</td>
|
||||||
<td>batchSureShortname</td>
|
<td>batchSureShortname</td>
|
||||||
<td>批量确认集团客户</td>
|
<td>批量确认集团客户</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -52,7 +47,7 @@
|
|||||||
<tr >
|
<tr >
|
||||||
<td>4</td>
|
<td>4</td>
|
||||||
<td>POST</td>
|
<td>POST</td>
|
||||||
<td>/cancelBatch</td>
|
<td>celBatch</td>
|
||||||
<td>cancelBatch</td>
|
<td>cancelBatch</td>
|
||||||
<td>批量作废客户</td>
|
<td>批量作废客户</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -76,7 +71,7 @@
|
|||||||
<tr >
|
<tr >
|
||||||
<td>2</td>
|
<td>2</td>
|
||||||
<td>GET</td>
|
<td>GET</td>
|
||||||
<td>/addListbyclientcode</td>
|
<td>addListbyclientcode</td>
|
||||||
<td>addListbyclientcode</td>
|
<td>addListbyclientcode</td>
|
||||||
<td>根据客户id和创建时间查询联系人</td>
|
<td>根据客户id和创建时间查询联系人</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -109,7 +104,6 @@
|
|||||||
<td></td>
|
<td></td>
|
||||||
<td></td>
|
<td></td>
|
||||||
<td></td>
|
<td></td>
|
||||||
<td></td>
|
|
||||||
</tr>
|
</tr>
|
||||||
<tr >
|
<tr >
|
||||||
<td>/api/group</td>
|
<td>/api/group</td>
|
||||||
@ -234,5 +228,7 @@
|
|||||||
</table>
|
</table>
|
||||||
|
|
||||||
<!--stackedit_data:
|
<!--stackedit_data:
|
||||||
eyJoaXN0b3J5IjpbMTI4MjI2MDUwNl19
|
eyJoaXN0b3J5IjpbMzA0NzgxOTcwLDI3MjQ5Mzc3NSwzMjczNz
|
||||||
|
IzMjksLTE0MjAyMDU2NTYsLTE3NTEyNDU5NzAsLTk4MDc2OTMw
|
||||||
|
NSwtNzExMjAzNTQwXX0=
|
||||||
-->
|
-->
|
48
项目管理库/诺唯赞CRM项目/CRM模块拆解分析/导出服务拆解分析.md
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
# 导出服务拆解分析
|
||||||
|
## 一、功能描述
|
||||||
|
主要功能:针对系统的提供各种单据的导出
|
||||||
|
## 二、代码运行截图
|
||||||
|
|
||||||
|
## 核心接口说明
|
||||||
|
| 类名地址 | 类地址名 | 类说明 | 请求方式 | api方法地址 | 方法名 | 方法说明 |
|
||||||
|
| ---------------------- | ------------------- | ------------------------ | -------- | ----------------------------- | -------------------------- | ------------------------------------------------ |
|
||||||
|
| ActivityclientRest | /api/activityclient | 客户活动关联表前端控制器 | post | /exportActivityclient | exportActivityclient | 导出全线活动列表信息 |
|
||||||
|
| ActivityclientRest | /api/activityclient | 客户活动关联表前端控制器 | get | /exportActivityclientTemp | exportActivityclientTemp | 导出全线活动列模板 |
|
||||||
|
| ActivityclientRest | /api/activityclient | 客户活动关联表前端控制器 | post | /importActivityclient | importActivityclient | 导入全线活动列表 |
|
||||||
|
| ActivitydetailRest | /api/activitydetail | 活动详情控制器 | get | /downloadActivitydetailTemp | downloadActivitydetailTemp | 导出活动商品模板信息 |
|
||||||
|
| ActivitydetailRest | /api/activitydetail | 活动详情控制器 | post | /uploadActivitydetail | uploadActivitydetail | 导入活动商品明细 |
|
||||||
|
| ActivityorderRest | /api/activityorder | 活动订单控制器 | post | /exportActivityOrder | exportActivityOrder | 导出活动订单列表信息 |
|
||||||
|
| ActivityorderRest | /api/activityorder | 活动订单控制器 | post | /exportActivityManageOrder | exportActivityManageOrder | 导出活动管理订单列表信息 |
|
||||||
|
| ActivityorderRest | /api/activityorder | 活动订单控制器 | post | /exportGiftOrderManage | exportGiftOrderManage | 导出活动订单管理礼品列表信息 |
|
||||||
|
| ClientgiftRest | /api/clientgift | 客户礼品控制器 | get | /exportActiGiftAllList | exportActiGiftAllList | 条件导出客户礼品发放列表 |
|
||||||
|
| ClientgiftRest | /api/clientgift | 客户礼品控制器 | get | /exportclientgiftList | exportclientgiftList | 条件导出客户礼品发放列表 |
|
||||||
|
| ClientgiftRest | /api/clientgift | 客户礼品控制器 | get | /exportgiftList | exportgiftList | 根据活动ID导出客户礼品数量列表 |
|
||||||
|
| ClientgiftRest | /api/clientgift | 客户礼品控制器 | post | /importOrderGift | importOrderGift | 导入捆绑活动订单礼品信息 |
|
||||||
|
| BaddebtController | /api/badDebt | 呆坏账 | post | /exportBaddebt | exportBaddebtDetail | 导出呆坏账申请明细 |
|
||||||
|
| CanceldetailController | /api/canceldetail | 退货单明细 | post | /exportCanceldetail | exportCanceldetail | 导出退货单明细列表 |
|
||||||
|
| ClientextendRest | /api/clientextend | 导出客户开拓进展信息 | post | /export | export | 条件导出客户开拓进展明细信息 |
|
||||||
|
| ClientextendRest | /api/clientextend | 导出客户开拓进展信息 | post | /exportskclientprogress | exportskclientprogress | 条件导出客户开拓进展信息 |
|
||||||
|
| ClientRest | /api/client | 导出客户 | post | /exportClient | exportClient | 导出客户列表信息 |
|
||||||
|
| ClientRest | /api/client | 导出客户 | get | /exportClientGroup/{tenantid} | exportclientgroup | 导出客户分组 |
|
||||||
|
| ClientRest | /api/client | 导出客户 | post | /exportRecycleClient | exportRecycleClient | 导出回收站客户信息 |
|
||||||
|
| ClientRest | /api/client | 导出客户 | get | /exportCustormTemp | exportCustormTemp | 导出海外市场客户模板 |
|
||||||
|
| ClientRest | /api/client | 导出客户 | post | /exportclientgroup4list | exportclientgroup4list | 导出客户分组 |
|
||||||
|
| ClientRest | /api/client | 导出客户 | post | /importActivityClientscop | importActivityClientscop | 导入活动客户范围 |
|
||||||
|
| ClientRest | /api/client | 导出客户 | post | /importClientBusiscope | importClientBusiscope | 根据归属单位初始化客户业务方向 |
|
||||||
|
| ClientRest | /api/client | 导出客户 | post | /importClientForIBG | importClientForIBG | 导入客户(国际业务二部) |
|
||||||
|
| ClientRest | /api/client | 导出客户 | post | /importClientGroup | importClientGroup | 导入客户分组信息 |
|
||||||
|
| ClientrevenueRest | /api/clientrevenue | 客户贡献度控制器 | POST | /exportskclientcontribution | exportskclientcontribution | 条件导出生科客户贡献排名信息 |
|
||||||
|
| CouponClientRest | /api/couponclient | 客户优惠卷 | post | /exportCouponClient | exportContract | 导出客户优化卷列表 |
|
||||||
|
| CouponClientRest | /api/couponclient | 客户优惠卷 | post | /import | importData | 导入客户优惠券列表 |
|
||||||
|
| ServicemanRest | /api/serviceman | 客户负责人控制器 | post | /syncrole | syncrole | 导入ERP(excel),同步对应客户的的写和负责人角色 |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!--stackedit_data:
|
||||||
|
eyJoaXN0b3J5IjpbLTE2NzgyNDgyMDAsLTg0Nzg2MTQ3LDI5OT
|
||||||
|
UzMDMzMSwxNzc0NTA1NDczLDExNjY3MjQ3MDMsMTE3NDYxMDI4
|
||||||
|
OSwyNjM1NTc5MzQsMTkwNjgwMDExNCwtMTYwOTkxNjAwNCwtMT
|
||||||
|
I3MzQ3MDIzNCwtNTIwMjA1NTc4LC03NjA1ODEwNDksLTgyMzIw
|
||||||
|
NjUxNiw2MTAxNTMyMTEsMzYzODQ1MDE5LDg3NTIzNzk2LDg2OT
|
||||||
|
U3MzAwMCwtMTE0MDg3NDc5MF19
|
||||||
|
-->
|
88
项目管理库/诺唯赞CRM项目/CRM模块拆解分析/应收-开票-收款-核销分析.md
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
|
||||||
|
# knowledge
|
||||||
|
**一、运行截图**
|
||||||
|
|
||||||
|
**二、应收分析**
|
||||||
|
应收,顾名思义,即为应该收入的销售单,应收主要与发票、收款、核销业务高度集成。
|
||||||
|
目前展示的功能为应收单列表,快捷查询应收单;提供申请开票、开票、申请合并开票、合并开票、导出功能。
|
||||||
|
#### 算法
|
||||||
|
|
||||||
|
可开票金额=价税合计-已开票金额-退货金额
|
||||||
|
注:退货金额来源于应收单详情的价税合计*退货数量
|
||||||
|
|
||||||
|
#### 关键业务流程
|
||||||
|
|
||||||
|
1)我的应收
|
||||||
|
基于业务条件,并通过登录用户的工号(empno)到订单表进行查询
|
||||||
|
|
||||||
|
1. 共享应收
|
||||||
|
|
||||||
|
基于业务条件,并通过登录用户的工号(empno)到服务团队人员表(t_crm_serviceman) 通过客户编码(clientcode)跟订单表的客户编码关联查询出t_crm_serviceman 中bill_share_order不等于null (rolecode=负责人时为null)或者shareorder_no(不为不共享=共享->可能为读或者写)或者rolecode=负责人相关订单数据
|
||||||
|
|
||||||
|
1. 我负责的部门应收
|
||||||
|
|
||||||
|
基于业务条件,并通过登录用户的userid查询部门责任信息表(t_crm_deptduty),如果系统设置--部门设置模块中 部门负责人、部门助理、技术支持等配置了则取部门负责人表的信息查询相关应收单数据
|
||||||
|
|
||||||
|
1. 全公司的应收
|
||||||
|
|
||||||
|
基于业务条件直接查询应收单表
|
||||||
|
4)合并开票会验证客户是否被禁用,禁用得客户无法开票
|
||||||
|
|
||||||
|
**三、发票分析**
|
||||||
|
开票业务在应收和订单中集成,销售通过立即开票或者在应收列表点击申请开票,然后助理审核对接到ERP生成发票数据;通过ERP同步到CRM更新发票里面的状态。
|
||||||
|
**关键业务流程**
|
||||||
|
|
||||||
|
#### 算法
|
||||||
|
|
||||||
|
1. 发票状态判断
|
||||||
|
2. 退货金额+开票金额=0、价税合计大于0:等待开票
|
||||||
|
3. 价税合计 = 退货金额或者实际价税合家为0 :关闭;
|
||||||
|
4. 退货金额+开票金额>=订单价税合计:全开票;
|
||||||
|
5. 否则:部分开票
|
||||||
|
6. 当ERP系统里面发票结案状态为"强结案",同步到CRM系统时需要将强结案的发票红冲状态修改为"作废",将目前系统里面发票核销状态显示"已核销"逻辑去除并按原始核销状态的取值逻辑取值;
|
||||||
|
|
||||||
|
**四、收款与核销分析**
|
||||||
|
|
||||||
|
收款业务主要有收款单核销与收款单确认主要用于关联发票与收款单进行核销操作。
|
||||||
|
#### 算法
|
||||||
|
|
||||||
|
涉及算法的位置:点击核销,打开核销详情页面,匹配发票数,筛选相同开票单位且和当前选中的发票未核销金额相等的发票(最多支持同时匹配3条)。
|
||||||
|
注:x=当前发票未核销金额;a=匹配发票未核销金额;b=匹配发票未核销金额;c=匹配发票未核销金额;size=数组长度;i=数组当前下标;minSize=数组最小下标;maxSize=数组最大下标;arr=数组
|
||||||
|
|
||||||
|
1. 匹配数1条
|
||||||
|
|
||||||
|
a=x
|
||||||
|
|
||||||
|
1. 匹配数2条
|
||||||
|
|
||||||
|
a+b=x
|
||||||
|
|
||||||
|
1. 匹配数3条
|
||||||
|
|
||||||
|
a+b+c=x
|
||||||
|
该算法的关键在于去除重复匹配的数据,减少循环层数,提高查询效率。
|
||||||
|
算法核心:固定i,同时前后移动数组进行比较(这里只说明三条匹配的算法,两条是一样的原理)
|
||||||
|
|
||||||
|
1. 当minSize=0且maxSize=0时,minSize=i+1;maxSize=size+1(同时从数组前后进行比比较)
|
||||||
|
2. 当minSize>=size时,i+1且跳出循环(此时说明当次比较已经完成,跳出循环进行下次比较)
|
||||||
|
3. 当minSize>=maxSize时,使maxSize=0,maxSize=0,i+1且跳出循环(此时也说明当次比较完成,跳出循环,将下标进行初始化,当前下标+1进行下一次比较)
|
||||||
|
4. 当a+b+c=x时,使maxSize=0,maxSize=0,i+1且跳出循环,并将arr[i],arr[minSize],arr[maxSize]放入结果中(此时说明满足条件,将结果放入满足条件的集合中,跳出循环进行下一次比较)
|
||||||
|
|
||||||
|
5. 当a+b+c>x时,minSize,i保持不变,maxSize-1,继续进行比较
|
||||||
|
6. 当a+b+c<x时,maxSize,i保持不变,minSize+1,继续进行比较
|
||||||
|
|
||||||
|
#### 关键业务流程
|
||||||
|
|
||||||
|
**五、表结构**
|
||||||
|
|
||||||
|
|
||||||
|
**六、接口列表**
|
||||||
|
已在Apifox中用idea插件全部导出
|
||||||
|
|
||||||
|
|
||||||
|
<!--stackedit_data:
|
||||||
|
eyJoaXN0b3J5IjpbLTE4MzA0MDYyOTQsLTE5NDk4NTYyMzEsLT
|
||||||
|
E2MzE2Mjc4OTEsNzU2MTE0MzY2LDI2NTA5MDM5LC0xMjU0ODE3
|
||||||
|
MDc5LDI2NTA5MDM5LC0xMjU0ODE3MDc5LC0yNzU3ODI3NDMsLT
|
||||||
|
IwMjc5NDg0NTAsNDU2Nzg0MjE3XX0=
|
||||||
|
-->
|
45
项目管理库/诺唯赞CRM项目/CRM模块拆解分析/文件预览工程拆解分析.md
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
|
||||||
|
# 文件预览工程拆解分析
|
||||||
|
|
||||||
|
## 功能描述
|
||||||
|
|
||||||
|
- 维护生成Word文件的模板。
|
||||||
|
|
||||||
|
- 生成PDF文件。
|
||||||
|
|
||||||
|
## 代码运行截图
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 接口设计
|
||||||
|
|
||||||
|
| HTTP 请求路径 | 类名 | 方法名 | 接口说明 |
|
||||||
|
| ------------------------------------------- | ------------------ | ---------------- | --------------------------- |
|
||||||
|
| POST /contract/upload | ContractController | contractUpload | 上传模板文件,文件名即为模板名。上传后放入指定文件夹。 |
|
||||||
|
| POST /contract/list/template | ContractController | listTemplate | 列出已有模板。 |
|
||||||
|
| POST /contract/gen/{templateName} | ContractController | contractGen | 生成Word文件,返回其预览地址。 |
|
||||||
|
| POST /contract/excel/{templateName} | ContractController | excel | 生成Excel文件,返回预览地址。 |
|
||||||
|
| POST /contract/download/{templateName} | ContractController | downloadcontract | 生成PDF文件并下载。 |
|
||||||
|
| POST /contract/downloadWord/{templateName} | ContractController | downloadWord | 生成Word文件并下载。 |
|
||||||
|
| POST /contract/downloadExcel/{templateName} | ContractController | downloadExcel | 生成Excel文件并下载。 |
|
||||||
|
|
||||||
|
## 核心业务逻辑
|
||||||
|
|
||||||
|
### 生成Word/Excel
|
||||||
|
|
||||||
|
将参数以 Map 的形式传入,[Poi-tl](https://deepoove.com/poi-tl/) 按规则将参数渲染到模板。
|
||||||
|
|
||||||
|
### 生成PDF
|
||||||
|
|
||||||
|
调用 kkfile(底层是 LibreOffice),将 Word/Excel 转换为 PDF。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!--stackedit_data:
|
||||||
|
eyJoaXN0b3J5IjpbLTE3Nzk5NjIwNzYsLTY5MTI3NjUyNCwxNj
|
||||||
|
IxMzQzODM3XX0=
|
||||||
|
-->
|
@ -4,16 +4,811 @@
|
|||||||
2、公开CRM内部接口提供给有赞(商城调用)
|
2、公开CRM内部接口提供给有赞(商城调用)
|
||||||
3、封装调用WMS、SAP、CMS接口
|
3、封装调用WMS、SAP、CMS接口
|
||||||
## **二、代码运行截图**
|
## **二、代码运行截图**
|
||||||

|

|
||||||

|
|
||||||
## **三、接口说明**
|
## **三、接口说明**
|
||||||
|
|
||||||
### **1.CMS接口**
|
### **1.CMS接口**
|
||||||
| | 类地址 | 类名 |
|
<table>
|
||||||
|-- |
|
<tbody>
|
||||||
|--|--|
|
<tr>
|
||||||
| | | |
|
<td>类地址</td>
|
||||||
|
<td>类名</td>
|
||||||
|
<td>类说明</td>
|
||||||
|
<td>请求方式</td>
|
||||||
|
<td>方法地址</td>
|
||||||
|
<td>方法名</td>
|
||||||
|
<td>方法说明</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td rowspan="2" >/api/cms/contract</td>
|
||||||
|
<td rowspan="2" >CmsContractController </td>
|
||||||
|
<td rowspan="2" >cms对接合同</td>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/pass</td>
|
||||||
|
<td >pass</td>
|
||||||
|
<td >合同审核通过</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/close</td>
|
||||||
|
<td >close</td>
|
||||||
|
<td >合同关闭</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
### 2.SAP接口
|
||||||
|
<table >
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td >类地址</td>
|
||||||
|
<td >类名</td>
|
||||||
|
<td >类说明</td>
|
||||||
|
<td >请求方式</td>
|
||||||
|
<td >方法地址</td>
|
||||||
|
<td >方法名</td>
|
||||||
|
<td >方法说明</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td rowspan="2" >/api/sap/allot</td>
|
||||||
|
<td rowspan="2" >SapAllotController </td>
|
||||||
|
<td rowspan="2" >sap对接分布式调拨单</td>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/callback/update</td>
|
||||||
|
<td >updateBySap</td>
|
||||||
|
<td >更新调拨单状态(SAP调用)</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/sync</td>
|
||||||
|
<td >sync</td>
|
||||||
|
<td >调拨单调入后同步到SAP</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td rowspan="3" >/api/sap/cancelOrder</td>
|
||||||
|
<td rowspan="3" >SapCancelOrderController</td>
|
||||||
|
<td rowspan="3" >sap对接退货订单</td>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/save</td>
|
||||||
|
<td >saveCancelOrder</td>
|
||||||
|
<td >新增退货订单</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/delete</td>
|
||||||
|
<td >delete</td>
|
||||||
|
<td >删除退货订单</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/delete/atom</td>
|
||||||
|
<td >deleteAtom</td>
|
||||||
|
<td >删除(原子性)</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td rowspan="16" >/api/sap/client</td>
|
||||||
|
<td rowspan="16" >SapClientController</td>
|
||||||
|
<td rowspan="16" >sap对接客户</td>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/save</td>
|
||||||
|
<td >saveClient</td>
|
||||||
|
<td >新建客户</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/update</td>
|
||||||
|
<td >updateClient</td>
|
||||||
|
<td >修改客户</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/delete</td>
|
||||||
|
<td >deleteClient</td>
|
||||||
|
<td >删除客户</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/freeze</td>
|
||||||
|
<td >freezeClient</td>
|
||||||
|
<td >冻结客户</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/unFreeze</td>
|
||||||
|
<td >unFreezeClient</td>
|
||||||
|
<td >解冻客户</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/partialUpdate</td>
|
||||||
|
<td >partialUpdate</td>
|
||||||
|
<td >sap更新客户或组织信息后调用</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/updateBatch</td>
|
||||||
|
<td >updateBatch</td>
|
||||||
|
<td >批量修改客户</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/syncClient</td>
|
||||||
|
<td >syncClient</td>
|
||||||
|
<td >初始化客户</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/addRelation</td>
|
||||||
|
<td >addRelation</td>
|
||||||
|
<td >增加关联</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >GET</td>
|
||||||
|
<td >/selectSapCodeByClientCode</td>
|
||||||
|
<td >selectSapCodeByClientCode</td>
|
||||||
|
<td >根据客户编码查询客户的sap编码</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/saveClientSap</td>
|
||||||
|
<td >saveClientSap</td>
|
||||||
|
<td >保存客户sap关联</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/batchSave</td>
|
||||||
|
<td >batchSaveClientOrg</td>
|
||||||
|
<td >基于组织关联批量保存客户sap关联</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/batchSaveClientSap</td>
|
||||||
|
<td >batchSaveClientSap</td>
|
||||||
|
<td >基于客户关联批量保存客户sap关联</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >GET</td>
|
||||||
|
<td >/getSapClientCode</td>
|
||||||
|
<td >getSapOrderCode</td>
|
||||||
|
<td >通过CRM客户编码查询对应的SAP客户编号</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/batchImport</td>
|
||||||
|
<td >batchImport</td>
|
||||||
|
<td >批量插入sap客户关联</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/getSapCode</td>
|
||||||
|
<td >getSapCode</td>
|
||||||
|
<td >查询sap编码</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >/api/sap/exchange</td>
|
||||||
|
<td >SapExchangeController</td>
|
||||||
|
<td >sap对接汇率</td>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/getExchange</td>
|
||||||
|
<td >saveCancelOrder</td>
|
||||||
|
<td >月初调取记账汇率</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td rowspan="3" >/api/sap/instrumentPut</td>
|
||||||
|
<td rowspan="3" >SapInstrumentPutController</td>
|
||||||
|
<td rowspan="3" >sap对接其他出库单</td>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/save</td>
|
||||||
|
<td >saveInstrumentPut</td>
|
||||||
|
<td >建立资产卡片,新增其他出库单</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/saveQtckd</td>
|
||||||
|
<td >saveQtckd</td>
|
||||||
|
<td >新增其他出库单</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/update</td>
|
||||||
|
<td >update</td>
|
||||||
|
<td >更新单据数据(sap调用)</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td rowspan="4" >/api/sap/invoice</td>
|
||||||
|
<td rowspan="4" >SapInvoiceController</td>
|
||||||
|
<td rowspan="4" >sap对接发票</td>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/save</td>
|
||||||
|
<td >saveInvoice</td>
|
||||||
|
<td >新增</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/writeOff</td>
|
||||||
|
<td >writeOffInvoice</td>
|
||||||
|
<td >冲销</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/update</td>
|
||||||
|
<td >updateInvoice</td>
|
||||||
|
<td >更新发票</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/importUpdate</td>
|
||||||
|
<td >importUpdate</td>
|
||||||
|
<td >导入更新发票</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td rowspan="2" >/api/sap/invoiceLost</td>
|
||||||
|
<td rowspan="2" >SapInvoiceLostController</td>
|
||||||
|
<td rowspan="2" >sap对接发票丢失</td>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/pushOtherIn</td>
|
||||||
|
<td >pushOtherIn</td>
|
||||||
|
<td >发票丢失下推退换货退回订单</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/lost/delete</td>
|
||||||
|
<td >deleteLost</td>
|
||||||
|
<td >删除发票丢失下推的退换货退回订单</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >/api/sap/moneyBack</td>
|
||||||
|
<td >SapMoneyBackController</td>
|
||||||
|
<td >sap对接收款单</td>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/push</td>
|
||||||
|
<td >push</td>
|
||||||
|
<td >收款单数据推送</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td rowspan="7" >/api/sap/orderErp</td>
|
||||||
|
<td rowspan="7" >SapOrderErpController</td>
|
||||||
|
<td rowspan="7" >sap对接订单</td>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/save</td>
|
||||||
|
<td >saveOrderErp</td>
|
||||||
|
<td >新增订单</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/update</td>
|
||||||
|
<td >updateOrderErp</td>
|
||||||
|
<td >修改订单</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/close</td>
|
||||||
|
<td >closeOrderErp</td>
|
||||||
|
<td >关闭订单</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/delete</td>
|
||||||
|
<td >deleteOrderErp</td>
|
||||||
|
<td >删除订单</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/modifySale</td>
|
||||||
|
<td >modifySales</td>
|
||||||
|
<td >更新订单销售员</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/importRelation</td>
|
||||||
|
<td >importRelation</td>
|
||||||
|
<td >导入订单关联</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >GET</td>
|
||||||
|
<td >/getSapOrderCode</td>
|
||||||
|
<td >getSapOrderCode</td>
|
||||||
|
<td >通过CRM订单编号查询对应的SAP订单编号</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td rowspan="4" >/api/sap/org</td>
|
||||||
|
<td rowspan="4" >SapOrgController</td>
|
||||||
|
<td rowspan="4" >sap对接组织</td>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/save</td>
|
||||||
|
<td >saveOrg</td>
|
||||||
|
<td >新增组织</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/update</td>
|
||||||
|
<td >updateOrg</td>
|
||||||
|
<td >修改组织</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >GET</td>
|
||||||
|
<td >/getSapOrgCode</td>
|
||||||
|
<td >getSapOrderCode</td>
|
||||||
|
<td >通过CRM客户编码查询对应的SAP客户编号</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/batchImport</td>
|
||||||
|
<td >batchImport</td>
|
||||||
|
<td >批量插入sap组织关联</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td rowspan="3" >/api/sap/product</td>
|
||||||
|
<td rowspan="3" >SapProductController</td>
|
||||||
|
<td rowspan="3" >sap对接物料</td>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/syn</td>
|
||||||
|
<td >syn</td>
|
||||||
|
<td >sap同步物料到crm</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/getSapCode</td>
|
||||||
|
<td >getSapCode</td>
|
||||||
|
<td >通过crm的productCode集合查询出SAP的productCode</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/getSapBusiCodeMap</td>
|
||||||
|
<td >getSapBusiCodeMap</td>
|
||||||
|
<td >通过SAP的productCode集合查询出crm的productCode</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >/api/sap/production</td>
|
||||||
|
<td >SapProductionController</td>
|
||||||
|
<td >sap对接定制生产</td>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/save</td>
|
||||||
|
<td >save</td>
|
||||||
|
<td >新增</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >/api/sap/purchaseOrder</td>
|
||||||
|
<td >SapPurchaseOrderController</td>
|
||||||
|
<td >sap对接采购订单</td>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/save</td>
|
||||||
|
<td >save</td>
|
||||||
|
<td >采购订单</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td rowspan="4" >/api/sap/receivable</td>
|
||||||
|
<td rowspan="4" >SapReceivableController</td>
|
||||||
|
<td rowspan="4" >sap对接应收单</td>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/save</td>
|
||||||
|
<td >saveReceivable</td>
|
||||||
|
<td >新增</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/writeOff</td>
|
||||||
|
<td >writeOffReceivable</td>
|
||||||
|
<td >冲销</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >GET</td>
|
||||||
|
<td >/checkWhetherExist</td>
|
||||||
|
<td >checkWhetherExist</td>
|
||||||
|
<td >检查应收单是否存在关联</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >GET</td>
|
||||||
|
<td >/getSapCode</td>
|
||||||
|
<td >getSapCode</td>
|
||||||
|
<td >根据crm单号查询sap应收单号</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td rowspan="2" >/api/sap/refund</td>
|
||||||
|
<td rowspan="2" >SapRefundController</td>
|
||||||
|
<td rowspan="2" >sap对接退款单</td>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/save</td>
|
||||||
|
<td >saveRefund</td>
|
||||||
|
<td >新增</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/update</td>
|
||||||
|
<td >update</td>
|
||||||
|
<td >退款单状态回传接口</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td rowspan="12" >/api/sap/returns</td>
|
||||||
|
<td rowspan="12" >SapReturnsController</td>
|
||||||
|
<td rowspan="12" >sap对接退换货</td>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/back</td>
|
||||||
|
<td >back</td>
|
||||||
|
<td >退换货-退货</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/send</td>
|
||||||
|
<td >send</td>
|
||||||
|
<td >退换货-发货</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/send/modify</td>
|
||||||
|
<td >modifySend</td>
|
||||||
|
<td >退换货-发货修改</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/send/delete</td>
|
||||||
|
<td >deleteSend</td>
|
||||||
|
<td >退换货-发货删除</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >GET</td>
|
||||||
|
<td >/send/unAudit</td>
|
||||||
|
<td >unAuditSend</td>
|
||||||
|
<td >退换货-发货反审核(办事处发货)</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/back/chargeAgainstBackStockOut</td>
|
||||||
|
<td >chargeAgainstBackStockOut</td>
|
||||||
|
<td >退换货-退回出库单核销</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/back/deleteBackStockOut</td>
|
||||||
|
<td >deleteBackStockOut</td>
|
||||||
|
<td >退换货-删除退换货退回出库单</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/back/deleteBackOrder</td>
|
||||||
|
<td >deleteBackOrder</td>
|
||||||
|
<td >退换货-删除退换货退回订单</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/send/deleteWmsSendStockOut</td>
|
||||||
|
<td >deleteWmsSendStockOut</td>
|
||||||
|
<td >退换货-发货WMS出库单删除</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/send/chargeAgainstSendStockOut</td>
|
||||||
|
<td >chargeAgainstBackStockOut</td>
|
||||||
|
<td >退换货-发货出库单核销</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/send/deleteSendStockOut</td>
|
||||||
|
<td >deleteSendStockOut</td>
|
||||||
|
<td >退换货-删除退换货发货出库单</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/send/deleteSendOrder</td>
|
||||||
|
<td >deleteSendOrder</td>
|
||||||
|
<td >退换货-删除退换货发货订单</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >/api/sap/scrapApply</td>
|
||||||
|
<td >SapScrapApplyController</td>
|
||||||
|
<td >sap对接报废</td>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/save</td>
|
||||||
|
<td >save</td>
|
||||||
|
<td >新增</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td rowspan="6" >/api/sap/stock</td>
|
||||||
|
<td rowspan="6" >SapStockController</td>
|
||||||
|
<td rowspan="6" >sap对接库存</td>
|
||||||
|
<td >GET</td>
|
||||||
|
<td >/usableStockCalculate</td>
|
||||||
|
<td >usableStockCalculate</td>
|
||||||
|
<td >可用库存计算</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/usableStockCalculateBatch</td>
|
||||||
|
<td >usableStockCalculateBatch</td>
|
||||||
|
<td >批量可用库存计算</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/usableStockCalculateBatchGift</td>
|
||||||
|
<td >usableStockCalculateBatchGift</td>
|
||||||
|
<td >批量可用库存计算</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/instantStockQuery</td>
|
||||||
|
<td >instantStockQuery</td>
|
||||||
|
<td >即时库存查询</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/instantStockQueryNoLotnum</td>
|
||||||
|
<td >instantStockQueryNoLotnum</td>
|
||||||
|
<td >无批次即时库存查询(礼品库存)</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/instantStockQueryAll</td>
|
||||||
|
<td >instantStockQueryAll</td>
|
||||||
|
<td >即时库存查询所有</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td rowspan="2" >/api/sap/stockingApply</td>
|
||||||
|
<td rowspan="2" >SapStockingApplyController</td>
|
||||||
|
<td rowspan="2" >备货申请</td>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/save</td>
|
||||||
|
<td >saveStockingApply</td>
|
||||||
|
<td >新增备货申请</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/delete</td>
|
||||||
|
<td >deleteStockingApply</td>
|
||||||
|
<td >删除备货申请</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td rowspan="12" >/api/sap/stockOut</td>
|
||||||
|
<td rowspan="12" >SapStockOutController</td>
|
||||||
|
<td rowspan="12" >sap对接出库单</td>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/save</td>
|
||||||
|
<td >saveStockOut</td>
|
||||||
|
<td >新增</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/update</td>
|
||||||
|
<td >updateStockOut</td>
|
||||||
|
<td >修改</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/delete</td>
|
||||||
|
<td >deleteStockOut</td>
|
||||||
|
<td >删除</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/deleteByReturns</td>
|
||||||
|
<td >deleteStockOutByReturns</td>
|
||||||
|
<td >退货业务删除出库单</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/posting</td>
|
||||||
|
<td >postingStockOut</td>
|
||||||
|
<td >过账</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/chargeAgainst</td>
|
||||||
|
<td >chargeAgainstStockOut</td>
|
||||||
|
<td >冲销</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/unAudit</td>
|
||||||
|
<td >unAudit</td>
|
||||||
|
<td >反审核</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >GET</td>
|
||||||
|
<td >/getSapStockOutCode</td>
|
||||||
|
<td >getSapOrderCode</td>
|
||||||
|
<td >通过CRM出库单编码查询对应的SAP出库单编号</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/delete/atom</td>
|
||||||
|
<td >deleteAtom</td>
|
||||||
|
<td >删除(原子性)</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/sureIn</td>
|
||||||
|
<td >sureIn</td>
|
||||||
|
<td >确认入库</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/confirm</td>
|
||||||
|
<td >confirm</td>
|
||||||
|
<td >报关</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/getSapCode</td>
|
||||||
|
<td >getSapCode</td>
|
||||||
|
<td >查询sap编码</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >/api/sap/storehouse</td>
|
||||||
|
<td >SapStorehouseController</td>
|
||||||
|
<td >sap对接仓库</td>
|
||||||
|
<td >GET</td>
|
||||||
|
<td >/querySapStoreHouse</td>
|
||||||
|
<td >querySapStoreHouse</td>
|
||||||
|
<td >查询SAP所有仓库信息</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >/api/sap/writeOff</td>
|
||||||
|
<td >SapWriteOffController</td>
|
||||||
|
<td >sap对接收款确认单</td>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/save</td>
|
||||||
|
<td >saveWriteOff</td>
|
||||||
|
<td >新增</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
### 3.wms接口
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td >类地址</td>
|
||||||
|
<td >类名</td>
|
||||||
|
<td >类说明</td>
|
||||||
|
<td >请求方式</td>
|
||||||
|
<td >方法地址</td>
|
||||||
|
<td >方法名</td>
|
||||||
|
<td >方法说明</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >/api/wms/allow</td>
|
||||||
|
<td >WmsAllotController </td>
|
||||||
|
<td >sap对接分布式调拨单</td>
|
||||||
|
<td >GET</td>
|
||||||
|
<td >/queryExpress</td>
|
||||||
|
<td >queryExpress</td>
|
||||||
|
<td >查询wms快递信息</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td rowspan="2" >/api/wms/returns</td>
|
||||||
|
<td rowspan="2" >WmsReturnsController</td>
|
||||||
|
<td rowspan="2" >wms对接退换货</td>
|
||||||
|
<td >GET</td>
|
||||||
|
<td >/verification</td>
|
||||||
|
<td >verification</td>
|
||||||
|
<td >退换货总部发货的出库单锁单</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/send/updateStatus</td>
|
||||||
|
<td >updateSendStatus</td>
|
||||||
|
<td >更新退换货总部发货出库单状态</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td rowspan="6" >/api/wms/stockOut</td>
|
||||||
|
<td rowspan="6" >WmsStockOutController</td>
|
||||||
|
<td rowspan="6" >wms对接出库单</td>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/save</td>
|
||||||
|
<td >saveStockOut</td>
|
||||||
|
<td >新增</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/update</td>
|
||||||
|
<td >updateStockOut</td>
|
||||||
|
<td >修改</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/verification</td>
|
||||||
|
<td >verificationStockOut</td>
|
||||||
|
<td >校验、锁单、取消拣配</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/updateStatus</td>
|
||||||
|
<td >updateStatus</td>
|
||||||
|
<td >更新CRM出库单状态</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/signIn</td>
|
||||||
|
<td >signIn</td>
|
||||||
|
<td >签收(总部出库单-签收)</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/delte/atom</td>
|
||||||
|
<td >deleteAtom</td>
|
||||||
|
<td >删除(原子性)</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
### 4.有赞(商城)接口
|
||||||
|
|
||||||
|
<table >
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td >类地址</td>
|
||||||
|
<td >类名</td>
|
||||||
|
<td >类说明</td>
|
||||||
|
<td >请求方式</td>
|
||||||
|
<td >方法地址</td>
|
||||||
|
<td >方法名</td>
|
||||||
|
<td >方法说明</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td rowspan="2" >/api/youzan/order</td>
|
||||||
|
<td rowspan="2" >OrderController</td>
|
||||||
|
<td rowspan="2" >订单控制器</td>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/list</td>
|
||||||
|
<td >orderList</td>
|
||||||
|
<td >订单列表(有赞)</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/detail</td>
|
||||||
|
<td >orderDetail</td>
|
||||||
|
<td >订单详情(有赞)</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td rowspan="2" >/api/youzan/preorder</td>
|
||||||
|
<td rowspan="2" >PreorderController</td>
|
||||||
|
<td rowspan="2" >预付款订单查询控制器</td>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/list</td>
|
||||||
|
<td >listByQuery</td>
|
||||||
|
<td >客户预付款订单列表查询接口</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/detail</td>
|
||||||
|
<td >getDetailByQuery</td>
|
||||||
|
<td >客户预付款订单使用详情查询接口</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >/api/youzan/imprest</td>
|
||||||
|
<td >PreorderImprestController</td>
|
||||||
|
<td >预付款余额查询控制器</td>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/</td>
|
||||||
|
<td >imprest</td>
|
||||||
|
<td >客户预付款余额查询接口</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >/api/youzan/user</td>
|
||||||
|
<td >UserController</td>
|
||||||
|
<td >用户控制器</td>
|
||||||
|
<td >POST</td>
|
||||||
|
<td >/list</td>
|
||||||
|
<td >userList</td>
|
||||||
|
<td >用户列表查询接口(有赞)</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
## **四****、核心业务流程图**
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
|
## **五、数据库**
|
||||||
|
|
||||||
|
****主要表截图如下:****
|
||||||
|

|
||||||
|
|
||||||
<!--stackedit_data:
|
<!--stackedit_data:
|
||||||
eyJoaXN0b3J5IjpbLTU3MzI1NDkyM119
|
eyJoaXN0b3J5IjpbMTAwNTU4OTI5NSwyNjY3MjYxNSw3NjIxNz
|
||||||
|
Y2MDksMjEwNTYwOTg2MCwxODAzMDczNzM2LC0xNjcwNjE5NzE5
|
||||||
|
LC0xNDAwODk2OTU4LC04NDM0MDE0NzgsMTAyMTE3Mjk4NCwtNT
|
||||||
|
czMjU0OTIzXX0=
|
||||||
-->
|
-->
|
@ -1,9 +0,0 @@
|
|||||||
### **一、功能描述**
|
|
||||||
|
|
||||||
### 三、数据库设计
|
|
||||||
|
|
||||||
### 四、代码运行截图
|
|
||||||

|
|
||||||
<!--stackedit_data:
|
|
||||||
eyJoaXN0b3J5IjpbLTY5MDk2NDYyNSwyMTM1NDcwMzE5XX0=
|
|
||||||
-->
|
|
1647
项目管理库/诺唯赞CRM项目/CRM模块拆解分析/订单全流程业务拆解分析.md
Normal file
@ -1,7 +0,0 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
> Written with [睿展知识库].
|
|
||||||
<!--stackedit_data:
|
|
||||||
eyJoaXN0b3J5IjpbMTYyMTM0MzgzN119
|
|
||||||
-->
|
|