@freedom_sky/feige-lib 5.22.0 → 5.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. package/.eslintignore +2 -2
  2. package/.eslintrc.js +15 -15
  3. package/.prettierrc.js +6 -6
  4. package/AGENTS.md +75 -75
  5. package/CHANGE.md +38 -34
  6. package/azure-pipelines-release.yml +56 -0
  7. package/dist/announcement/enum/announcement.enum.d.ts +11 -11
  8. package/dist/announcement/enum/announcement.enum.js +15 -15
  9. package/dist/buffet/index.d.ts +46 -46
  10. package/dist/buffet/index.js +95 -95
  11. package/dist/const/const.d.ts +372 -370
  12. package/dist/const/const.js +2387 -2374
  13. package/dist/enum/ai-token.enum.d.ts +10 -10
  14. package/dist/enum/ai-token.enum.js +14 -14
  15. package/dist/enum/checkout.enum.d.ts +13 -13
  16. package/dist/enum/checkout.enum.js +17 -17
  17. package/dist/enum/common.enum.d.ts +18 -14
  18. package/dist/enum/common.enum.js +23 -18
  19. package/dist/enum/continent.enum.d.ts +8 -8
  20. package/dist/enum/continent.enum.js +11 -11
  21. package/dist/enum/dish.enum.d.ts +4 -4
  22. package/dist/enum/dish.enum.js +7 -7
  23. package/dist/enum/from.enum.d.ts +14 -14
  24. package/dist/enum/from.enum.js +17 -17
  25. package/dist/enum/member.enum.d.ts +16 -16
  26. package/dist/enum/member.enum.js +21 -21
  27. package/dist/enum/menu-io.enum.d.ts +4 -4
  28. package/dist/enum/menu-io.enum.js +7 -7
  29. package/dist/enum/order.enum.d.ts +7 -7
  30. package/dist/enum/order.enum.js +10 -10
  31. package/dist/enum/pay-company.enum.d.ts +4 -4
  32. package/dist/enum/pay-company.enum.js +7 -7
  33. package/dist/enum/printer.enum.d.ts +36 -36
  34. package/dist/enum/printer.enum.js +45 -45
  35. package/dist/enum/receptionist.enum.d.ts +8 -8
  36. package/dist/enum/receptionist.enum.js +11 -11
  37. package/dist/enum/reservation.enum.d.ts +5 -5
  38. package/dist/enum/reservation.enum.js +8 -8
  39. package/dist/enum/role.enum.d.ts +7 -7
  40. package/dist/enum/role.enum.js +10 -10
  41. package/dist/enum/sms.enum.d.ts +14 -14
  42. package/dist/enum/sms.enum.js +18 -18
  43. package/dist/enum/tax.enum.d.ts +4 -4
  44. package/dist/enum/tax.enum.js +7 -7
  45. package/dist/enum/time-menu.enum.d.ts +4 -4
  46. package/dist/enum/time-menu.enum.js +7 -7
  47. package/dist/enum/timezone.emum.d.ts +33 -33
  48. package/dist/enum/timezone.emum.js +36 -36
  49. package/dist/enum/user-status.enum.d.ts +9 -9
  50. package/dist/enum/user-status.enum.js +12 -12
  51. package/dist/enum/visit-task.enum.d.ts +13 -13
  52. package/dist/enum/visit-task.enum.js +17 -17
  53. package/dist/enum/yeepay.enum.d.ts +22 -22
  54. package/dist/enum/yeepay.enum.js +30 -30
  55. package/dist/index.d.ts +203 -202
  56. package/dist/index.js +564 -562
  57. package/dist/interfaces/common/language.interface.d.ts +13 -13
  58. package/dist/interfaces/common/language.interface.js +2 -2
  59. package/dist/interfaces/member/member-transaction.interface.d.ts +27 -27
  60. package/dist/interfaces/member/member-transaction.interface.js +2 -2
  61. package/dist/interfaces/member/member.interface.d.ts +16 -16
  62. package/dist/interfaces/member/member.interface.js +2 -2
  63. package/dist/interfaces/order/baseOrder.interface.d.ts +84 -84
  64. package/dist/interfaces/order/baseOrder.interface.js +2 -2
  65. package/dist/interfaces/order/buffetOrder.interface.d.ts +13 -13
  66. package/dist/interfaces/order/buffetOrder.interface.js +2 -2
  67. package/dist/interfaces/order/deliveryOrder.interface.d.ts +9 -9
  68. package/dist/interfaces/order/deliveryOrder.interface.js +2 -2
  69. package/dist/interfaces/order/index.d.ts +7 -7
  70. package/dist/interfaces/order/index.js +6 -6
  71. package/dist/interfaces/order/order.interface.d.ts +75 -75
  72. package/dist/interfaces/order/order.interface.js +17 -17
  73. package/dist/interfaces/order/pickupOrder.interface.d.ts +8 -8
  74. package/dist/interfaces/order/pickupOrder.interface.js +2 -2
  75. package/dist/interfaces/order/serialOrder.interface.d.ts +4 -4
  76. package/dist/interfaces/order/serialOrder.interface.js +2 -2
  77. package/dist/interfaces/order/tableOrder.interface.d.ts +7 -7
  78. package/dist/interfaces/order/tableOrder.interface.js +2 -2
  79. package/dist/interfaces/reservation/reservation.interface.d.ts +46 -46
  80. package/dist/interfaces/reservation/reservation.interface.js +2 -2
  81. package/dist/interfaces/store/classification.interface.d.ts +7 -7
  82. package/dist/interfaces/store/classification.interface.js +2 -2
  83. package/dist/interfaces/store/dish.interface.d.ts +18 -18
  84. package/dist/interfaces/store/dish.interface.js +2 -2
  85. package/dist/interfaces/store/dishSnapshot.interface.d.ts +11 -11
  86. package/dist/interfaces/store/dishSnapshot.interface.js +2 -2
  87. package/dist/interfaces/store/member.interface.d.ts +8 -8
  88. package/dist/interfaces/store/member.interface.js +2 -2
  89. package/dist/interfaces/store/menu-export.interface.d.ts +12 -12
  90. package/dist/interfaces/store/menu-export.interface.js +2 -2
  91. package/dist/interfaces/store/specification.interface.d.ts +17 -17
  92. package/dist/interfaces/store/specification.interface.js +2 -2
  93. package/dist/interfaces/store/store.interface.d.ts +300 -300
  94. package/dist/interfaces/store/store.interface.js +2 -2
  95. package/dist/interfaces/store/subscription.interface.d.ts +43 -43
  96. package/dist/interfaces/store/subscription.interface.js +2 -2
  97. package/dist/interfaces/user/user.interface.d.ts +139 -139
  98. package/dist/interfaces/user/user.interface.js +2 -2
  99. package/dist/interfaces/visit-task/visit-task.interface.d.ts +17 -17
  100. package/dist/interfaces/visit-task/visit-task.interface.js +2 -2
  101. package/dist/order/index.d.ts +22 -22
  102. package/dist/order/index.js +58 -58
  103. package/jest.config.js +189 -189
  104. package/josn-hub/orders/tax-have-price-bind-order.ts +381 -381
  105. package/josn-hub/orders/tax-order.ts +371 -371
  106. package/josn-hub/orders//346/225/264/345/215/225/344/273/267/346/240/274/351/203/275/346/230/257/350/264/237/346/225/260/347/232/204/346/203/205/345/206/265.ts +321 -321
  107. package/josn-hub/orders//346/234/211/344/270/200/344/270/252/350/217/234/347/232/204/344/273/267/346/240/274/346/230/257/350/264/237/346/225/260/347/232/204/346/203/205/345/206/265.ts +348 -348
  108. package/josn-hub/orders//347/202/271/344/272/206/344/270/215/345/212/240/344/273/267/345/222/214/345/233/272/345/256/232/345/212/240/345/207/217/344/273/267/350/247/204/346/240/274/347/232/204/350/256/242/345/215/225.ts +350 -350
  109. package/josn-hub/orders//347/202/271/344/272/206/345/233/272/345/256/232/345/212/240/344/273/267-/347/231/276/345/210/206/346/257/224/345/212/240/344/273/267/350/247/204/346/240/274/347/232/204/350/256/242/345/215/225.ts +301 -301
  110. package/josn-hub/orders//347/202/271/344/272/206/346/234/252/345/212/240/344/273/267/350/247/204/346/240/274/347/232/204/350/256/242/345/215/225.ts +321 -321
  111. package/josn-hub/orders//347/202/271/344/272/206/346/234/252/345/212/240/344/273/267/350/247/204/346/240/274/347/232/204/350/256/242/345/215/225/345/271/266/346/234/211/351/205/215/351/200/201/350/264/271.ts +159 -159
  112. package/josn-hub/orders//350/207/252/345/212/251/351/244/220/347/232/204/346/203/205/345/206/265.ts +665 -665
  113. package/josn-hub/orders//351/203/250/345/210/206/351/200/200/350/217/234/347/232/204/346/203/205/345/206/265.ts +73 -73
  114. package/package.json +59 -59
  115. package/src/announcement/enum/announcement.enum.ts +12 -12
  116. package/src/buffet/index.ts +123 -123
  117. package/src/const/const.ts +2407 -2394
  118. package/src/enum/ai-token.enum.ts +10 -10
  119. package/src/enum/checkout.enum.ts +14 -14
  120. package/src/enum/common.enum.ts +20 -15
  121. package/src/enum/continent.enum.ts +8 -8
  122. package/src/enum/dish.enum.ts +4 -4
  123. package/src/enum/from.enum.ts +14 -14
  124. package/src/enum/member.enum.ts +16 -16
  125. package/src/enum/menu-io.enum.ts +4 -4
  126. package/src/enum/order.enum.ts +7 -7
  127. package/src/enum/pay-company.enum.ts +4 -4
  128. package/src/enum/printer.enum.ts +40 -40
  129. package/src/enum/receptionist.enum.ts +8 -8
  130. package/src/enum/reservation.enum.ts +5 -5
  131. package/src/enum/role.enum.ts +7 -7
  132. package/src/enum/sms.enum.ts +14 -14
  133. package/src/enum/tax.enum.ts +4 -4
  134. package/src/enum/time-menu.enum.ts +4 -4
  135. package/src/enum/timezone.emum.ts +33 -33
  136. package/src/enum/user-status.enum.ts +9 -9
  137. package/src/enum/visit-task.enum.ts +14 -14
  138. package/src/enum/yeepay.enum.ts +27 -27
  139. package/src/index.spec.ts +1082 -1082
  140. package/src/index.ts +616 -614
  141. package/src/interfaces/common/language.interface.ts +13 -13
  142. package/src/interfaces/member/member-transaction.interface.ts +32 -32
  143. package/src/interfaces/member/member.interface.ts +16 -16
  144. package/src/interfaces/order/baseOrder.interface.ts +89 -89
  145. package/src/interfaces/order/buffetOrder.interface.ts +14 -14
  146. package/src/interfaces/order/deliveryOrder.interface.ts +10 -10
  147. package/src/interfaces/order/index.ts +7 -7
  148. package/src/interfaces/order/order.interface.ts +84 -84
  149. package/src/interfaces/order/pickupOrder.interface.ts +9 -9
  150. package/src/interfaces/order/serialOrder.interface.ts +5 -5
  151. package/src/interfaces/order/tableOrder.interface.ts +8 -8
  152. package/src/interfaces/reservation/reservation.interface.ts +48 -48
  153. package/src/interfaces/store/classification.interface.ts +7 -7
  154. package/src/interfaces/store/dish.interface.ts +18 -18
  155. package/src/interfaces/store/dishSnapshot.interface.ts +12 -12
  156. package/src/interfaces/store/member.interface.ts +9 -9
  157. package/src/interfaces/store/menu-export.interface.ts +13 -13
  158. package/src/interfaces/store/specification.interface.ts +17 -17
  159. package/src/interfaces/store/store.interface.ts +316 -316
  160. package/src/interfaces/store/subscription.interface.ts +43 -43
  161. package/src/interfaces/user/user.interface.ts +139 -139
  162. package/src/interfaces/visit-task/visit-task.interface.ts +17 -17
  163. package/src/order/currency-settlement.spec.ts +72 -0
  164. package/src/order/index.ts +91 -91
  165. package/tsconfig.json +12 -12
@@ -1,73 +1,73 @@
1
- // 总价应该是23.2
2
- export const order: any = {
3
- _id: '658e5ff5fca6bd001ad1f284',
4
- buffet: {
5
- taxes: [],
6
- },
7
- checkoutFirst: false,
8
- printed: [],
9
- printerPrinted: [],
10
- kdsPrinted: [],
11
- printStatus: 'NotPrinted',
12
- operatorId: null,
13
- salesmanId: null,
14
- status: 'processing',
15
- payed: false,
16
- noTax: false,
17
- reserveTime: null,
18
- selfPickUp: false,
19
- pack: false,
20
- storeId: '5fdf7149f973ec00135fa626',
21
- tableNum: '20AAA',
22
- content: [
23
- {
24
- delivering: 3,
25
- finished: 0,
26
- retreated: 1,
27
- _id: '658e5ff5fca6bd001ad1f285',
28
- dishSnapshot: {
29
- names: {
30
- vi: '可乐Coca',
31
- },
32
- descriptions: {
33
- vi: '',
34
- },
35
- units: {
36
- vi: null,
37
- },
38
- type: 'Normal',
39
- description: '',
40
- soldOut: false,
41
- required: false,
42
- specifications: [],
43
- salesType: ['dine', 'takeout'],
44
- takeoutPrice: null,
45
- __v: 1,
46
- date: '2022-04-22T00:02:00.894Z',
47
- _id: '6261f078a108d8001a088f36',
48
- name: '可乐Coca',
49
- price: 20000,
50
- img: 'https://feige-img-hub.oss-cn-hangzhou.aliyuncs.com/898393196/1650585714021-eabHK2a3aA.jpg',
51
- chef: null,
52
- selectedSpecifications: [],
53
- noFullOrderDiscount: false,
54
- taxes: [],
55
- },
56
- count: 3,
57
- date: '2023-12-29T05:58:13.238Z',
58
- retreatReason: null,
59
- },
60
- ],
61
- clientId: '432427e0-a60e-11ee-b732-cf7d64356d46',
62
- type: 'table',
63
- tasks: [],
64
- priceHaveTaxBindOrderTaxes: [],
65
- serialOrderId: '20231229-12',
66
- checkout: [],
67
- process: [],
68
- taxes: [],
69
- date: '2023-12-29T05:58:13.240Z',
70
- __v: 9,
71
- autoCleanTime: '2023-12-29T05:58:13.264Z',
72
- };
73
- export const expectPrice = 60000;
1
+ // 总价应该是23.2
2
+ export const order: any = {
3
+ _id: '658e5ff5fca6bd001ad1f284',
4
+ buffet: {
5
+ taxes: [],
6
+ },
7
+ checkoutFirst: false,
8
+ printed: [],
9
+ printerPrinted: [],
10
+ kdsPrinted: [],
11
+ printStatus: 'NotPrinted',
12
+ operatorId: null,
13
+ salesmanId: null,
14
+ status: 'processing',
15
+ payed: false,
16
+ noTax: false,
17
+ reserveTime: null,
18
+ selfPickUp: false,
19
+ pack: false,
20
+ storeId: '5fdf7149f973ec00135fa626',
21
+ tableNum: '20AAA',
22
+ content: [
23
+ {
24
+ delivering: 3,
25
+ finished: 0,
26
+ retreated: 1,
27
+ _id: '658e5ff5fca6bd001ad1f285',
28
+ dishSnapshot: {
29
+ names: {
30
+ vi: '可乐Coca',
31
+ },
32
+ descriptions: {
33
+ vi: '',
34
+ },
35
+ units: {
36
+ vi: null,
37
+ },
38
+ type: 'Normal',
39
+ description: '',
40
+ soldOut: false,
41
+ required: false,
42
+ specifications: [],
43
+ salesType: ['dine', 'takeout'],
44
+ takeoutPrice: null,
45
+ __v: 1,
46
+ date: '2022-04-22T00:02:00.894Z',
47
+ _id: '6261f078a108d8001a088f36',
48
+ name: '可乐Coca',
49
+ price: 20000,
50
+ img: 'https://feige-img-hub.oss-cn-hangzhou.aliyuncs.com/898393196/1650585714021-eabHK2a3aA.jpg',
51
+ chef: null,
52
+ selectedSpecifications: [],
53
+ noFullOrderDiscount: false,
54
+ taxes: [],
55
+ },
56
+ count: 3,
57
+ date: '2023-12-29T05:58:13.238Z',
58
+ retreatReason: null,
59
+ },
60
+ ],
61
+ clientId: '432427e0-a60e-11ee-b732-cf7d64356d46',
62
+ type: 'table',
63
+ tasks: [],
64
+ priceHaveTaxBindOrderTaxes: [],
65
+ serialOrderId: '20231229-12',
66
+ checkout: [],
67
+ process: [],
68
+ taxes: [],
69
+ date: '2023-12-29T05:58:13.240Z',
70
+ __v: 9,
71
+ autoCleanTime: '2023-12-29T05:58:13.264Z',
72
+ };
73
+ export const expectPrice = 60000;
package/package.json CHANGED
@@ -1,59 +1,59 @@
1
- {
2
- "name": "@freedom_sky/feige-lib",
3
- "version": "5.22.0",
4
- "description": "",
5
- "main": "dist/index.js",
6
- "scripts": {
7
- "dev": "tsc -w",
8
- "build": "npm run test && tsc",
9
- "lint": "tsc --noEmit && eslint 'src/**/*.{js,ts}' --quiet --fix",
10
- "test": "jest",
11
- "prepublishOnly": "npm run build",
12
- "release": "npm publish"
13
- },
14
- "husky": {
15
- "hooks": {
16
- "pre-commit": "npm run test && tsc --noEmit && lint-staged"
17
- }
18
- },
19
- "lint-staged": {
20
- "*.{js,ts}": [
21
- "eslint --fix"
22
- ]
23
- },
24
- "repository": {
25
- "type": "git",
26
- "url": "git+https://github.com/freedom-git/feige-lib.git"
27
- },
28
- "author": "",
29
- "license": "ISC",
30
- "bugs": {
31
- "url": "https://github.com/freedom-git/feige-lib/issues"
32
- },
33
- "homepage": "https://github.com/freedom-git/feige-lib#readme",
34
- "publishConfig": {
35
- "access": "public"
36
- },
37
- "devDependencies": {
38
- "@types/big.js": "^6.1.2",
39
- "@types/jest": "^25.2.1",
40
- "@types/node": "^13.13.2",
41
- "@typescript-eslint/eslint-plugin": "^2.29.0",
42
- "@typescript-eslint/parser": "^2.29.0",
43
- "eslint": "^6.8.0",
44
- "eslint-config-google": "^0.14.0",
45
- "eslint-config-prettier": "^6.11.0",
46
- "eslint-plugin-jsdoc": "^24.0.0",
47
- "eslint-plugin-prettier": "^3.1.3",
48
- "husky": "^4.2.5",
49
- "jest": "^25.5.4",
50
- "lint-staged": "^10.1.7",
51
- "prettier": "^2.0.5",
52
- "ts-jest": "^25.4.0",
53
- "typescript": "^3.8.3"
54
- },
55
- "dependencies": {
56
- "big.js": "^6.1.1",
57
- "moment": "^2.29.1"
58
- }
59
- }
1
+ {
2
+ "name": "@freedom_sky/feige-lib",
3
+ "version": "5.23.0",
4
+ "description": "",
5
+ "main": "dist/index.js",
6
+ "scripts": {
7
+ "dev": "tsc -w",
8
+ "build": "npm run test && tsc",
9
+ "lint": "tsc --noEmit && eslint 'src/**/*.{js,ts}' --quiet --fix",
10
+ "test": "jest",
11
+ "prepublishOnly": "npm run build",
12
+ "release": "npm publish"
13
+ },
14
+ "husky": {
15
+ "hooks": {
16
+ "pre-commit": "npm run test && tsc --noEmit && lint-staged"
17
+ }
18
+ },
19
+ "lint-staged": {
20
+ "*.{js,ts}": [
21
+ "eslint --fix"
22
+ ]
23
+ },
24
+ "repository": {
25
+ "type": "git",
26
+ "url": "git+https://github.com/freedom-git/feige-lib.git"
27
+ },
28
+ "author": "",
29
+ "license": "ISC",
30
+ "bugs": {
31
+ "url": "https://github.com/freedom-git/feige-lib/issues"
32
+ },
33
+ "homepage": "https://github.com/freedom-git/feige-lib#readme",
34
+ "publishConfig": {
35
+ "access": "public"
36
+ },
37
+ "devDependencies": {
38
+ "@types/big.js": "^6.1.2",
39
+ "@types/jest": "^25.2.1",
40
+ "@types/node": "^13.13.2",
41
+ "@typescript-eslint/eslint-plugin": "^2.29.0",
42
+ "@typescript-eslint/parser": "^2.29.0",
43
+ "eslint": "^6.8.0",
44
+ "eslint-config-google": "^0.14.0",
45
+ "eslint-config-prettier": "^6.11.0",
46
+ "eslint-plugin-jsdoc": "^24.0.0",
47
+ "eslint-plugin-prettier": "^3.1.3",
48
+ "husky": "^4.2.5",
49
+ "jest": "^25.5.4",
50
+ "lint-staged": "^10.1.7",
51
+ "prettier": "^2.0.5",
52
+ "ts-jest": "^25.4.0",
53
+ "typescript": "^3.8.3"
54
+ },
55
+ "dependencies": {
56
+ "big.js": "^6.1.1",
57
+ "moment": "^2.29.1"
58
+ }
59
+ }
@@ -1,12 +1,12 @@
1
- export enum AnnouncementTypeEnum {
2
- Text = 'text',
3
- Image = 'image',
4
- }
5
-
6
- export enum AnnouncementTargetEnum {
7
- Table = 'table',
8
- Buffet = 'buffet',
9
- Serial = 'serial',
10
- PickUp = 'pickup',
11
- Delivery = 'delivery',
12
- }
1
+ export enum AnnouncementTypeEnum {
2
+ Text = 'text',
3
+ Image = 'image',
4
+ }
5
+
6
+ export enum AnnouncementTargetEnum {
7
+ Table = 'table',
8
+ Buffet = 'buffet',
9
+ Serial = 'serial',
10
+ PickUp = 'pickup',
11
+ Delivery = 'delivery',
12
+ }
@@ -1,123 +1,123 @@
1
- import { BuffetCombosItems, BuffetDishItem, Order, CONST, OrderTypeEnum } from '../index';
2
- /**
3
- * 计算自助餐总价
4
- */
5
-
6
- /**
7
- *
8
- */
9
- export function getDishItemInBuffet({
10
- dishId,
11
- buffet,
12
- }: {
13
- dishId: string;
14
- buffet?: BuffetCombosItems;
15
- }): BuffetDishItem | undefined {
16
- return buffet?.dishes.find((item) => String(item.dishId) === String(dishId));
17
- }
18
-
19
- /**
20
- *
21
- */
22
- export function getMaxBuffetDishUpperLimit({
23
- buffetDishItem,
24
- adultNum,
25
- childNum,
26
- }: {
27
- buffetDishItem: BuffetDishItem;
28
- adultNum: number;
29
- childNum: number;
30
- }): number {
31
- if (!buffetDishItem) throw 'No buffet dish item';
32
- if (!buffetDishItem.upperLimit.enable) return Infinity;
33
- return Math.ceil(buffetDishItem.upperLimit.adult * adultNum + buffetDishItem.upperLimit.child * childNum);
34
- }
35
-
36
- /**
37
- * @param buffetCombosItem
38
- * @param adultNum
39
- * @param childNum
40
- */
41
- export function calcBuffetTotalPrice(buffetCombosItem: BuffetCombosItems, adultNum: number, childNum: number): number {
42
- return buffetCombosItem.price.adult * adultNum + buffetCombosItem.price.child * childNum;
43
- }
44
-
45
- /**
46
- *
47
- */
48
- export function dishShowPriceWithBuffet({
49
- dishPrice,
50
- dishId,
51
- buffet,
52
- orderedCound,
53
- adultNum,
54
- childNum,
55
- }: {
56
- dishPrice: number;
57
- dishId: string;
58
- buffet?: BuffetCombosItems;
59
- orderedCound: number;
60
- adultNum: number;
61
- childNum: number;
62
- }) {
63
- const buffetDishItem = getDishItemInBuffet({ dishId, buffet });
64
- if (buffetDishItem) {
65
- if (orderedCound < getMaxBuffetDishUpperLimit({ buffetDishItem, adultNum, childNum })) {
66
- return 0;
67
- } else {
68
- return dishPrice;
69
- }
70
- } else {
71
- return dishPrice;
72
- }
73
- }
74
-
75
- /**
76
- *
77
- */
78
- export function getRoundCoundAndSecondsToNextTurn({
79
- order,
80
- }: {
81
- order: Order;
82
- }): {
83
- roundCount?: number;
84
- maxRounds?: number;
85
- secondsToNextTurn: number;
86
- } {
87
- let secondsToNextTurn = 0;
88
- const buffetCombosItems = order.buffet?.snapshot;
89
- if (!buffetCombosItems.orderingByTurns?.enable) {
90
- throw 'Buffet ordering by turns is not enabled';
91
- }
92
- const { interval, maxRounds } = buffetCombosItems.orderingByTurns;
93
- const previousBuffetSubmitTasks = order.tasks.filter(
94
- (task) =>
95
- (task.type === CONST.TASK_TYPE.CHECK || task.type === CONST.TASK_TYPE.APPEND) &&
96
- _haveAtLeastOneSameItem(
97
- task.content.map((content) => String(content.dishSnapshot._id)),
98
- buffetCombosItems.dishes.map((dish) => String(dish.dishId)),
99
- ),
100
- );
101
- if (previousBuffetSubmitTasks.length === 0) {
102
- secondsToNextTurn = 0;
103
- } else if (previousBuffetSubmitTasks.length >= maxRounds) {
104
- secondsToNextTurn = Infinity;
105
- } else {
106
- const lastBuffetSubmitTime = previousBuffetSubmitTasks[previousBuffetSubmitTasks.length - 1].date;
107
- secondsToNextTurn = interval * 60 - Math.floor((Date.now() - new Date(lastBuffetSubmitTime).getTime()) / 1000);
108
- }
109
- return {
110
- roundCount: previousBuffetSubmitTasks.length,
111
- secondsToNextTurn,
112
- maxRounds,
113
- };
114
- }
115
-
116
- /**
117
- * @param arr1
118
- * @param arr2
119
- */
120
- function _haveAtLeastOneSameItem<T>(arr1: T[], arr2: T[]): boolean {
121
- const set1 = new Set(arr1);
122
- return arr2.some((item) => set1.has(item));
123
- }
1
+ import { BuffetCombosItems, BuffetDishItem, Order, CONST, OrderTypeEnum } from '../index';
2
+ /**
3
+ * 计算自助餐总价
4
+ */
5
+
6
+ /**
7
+ *
8
+ */
9
+ export function getDishItemInBuffet({
10
+ dishId,
11
+ buffet,
12
+ }: {
13
+ dishId: string;
14
+ buffet?: BuffetCombosItems;
15
+ }): BuffetDishItem | undefined {
16
+ return buffet?.dishes.find((item) => String(item.dishId) === String(dishId));
17
+ }
18
+
19
+ /**
20
+ *
21
+ */
22
+ export function getMaxBuffetDishUpperLimit({
23
+ buffetDishItem,
24
+ adultNum,
25
+ childNum,
26
+ }: {
27
+ buffetDishItem: BuffetDishItem;
28
+ adultNum: number;
29
+ childNum: number;
30
+ }): number {
31
+ if (!buffetDishItem) throw 'No buffet dish item';
32
+ if (!buffetDishItem.upperLimit.enable) return Infinity;
33
+ return Math.ceil(buffetDishItem.upperLimit.adult * adultNum + buffetDishItem.upperLimit.child * childNum);
34
+ }
35
+
36
+ /**
37
+ * @param buffetCombosItem
38
+ * @param adultNum
39
+ * @param childNum
40
+ */
41
+ export function calcBuffetTotalPrice(buffetCombosItem: BuffetCombosItems, adultNum: number, childNum: number): number {
42
+ return buffetCombosItem.price.adult * adultNum + buffetCombosItem.price.child * childNum;
43
+ }
44
+
45
+ /**
46
+ *
47
+ */
48
+ export function dishShowPriceWithBuffet({
49
+ dishPrice,
50
+ dishId,
51
+ buffet,
52
+ orderedCound,
53
+ adultNum,
54
+ childNum,
55
+ }: {
56
+ dishPrice: number;
57
+ dishId: string;
58
+ buffet?: BuffetCombosItems;
59
+ orderedCound: number;
60
+ adultNum: number;
61
+ childNum: number;
62
+ }) {
63
+ const buffetDishItem = getDishItemInBuffet({ dishId, buffet });
64
+ if (buffetDishItem) {
65
+ if (orderedCound < getMaxBuffetDishUpperLimit({ buffetDishItem, adultNum, childNum })) {
66
+ return 0;
67
+ } else {
68
+ return dishPrice;
69
+ }
70
+ } else {
71
+ return dishPrice;
72
+ }
73
+ }
74
+
75
+ /**
76
+ *
77
+ */
78
+ export function getRoundCoundAndSecondsToNextTurn({
79
+ order,
80
+ }: {
81
+ order: Order;
82
+ }): {
83
+ roundCount?: number;
84
+ maxRounds?: number;
85
+ secondsToNextTurn: number;
86
+ } {
87
+ let secondsToNextTurn = 0;
88
+ const buffetCombosItems = order.buffet?.snapshot;
89
+ if (!buffetCombosItems.orderingByTurns?.enable) {
90
+ throw 'Buffet ordering by turns is not enabled';
91
+ }
92
+ const { interval, maxRounds } = buffetCombosItems.orderingByTurns;
93
+ const previousBuffetSubmitTasks = order.tasks.filter(
94
+ (task) =>
95
+ (task.type === CONST.TASK_TYPE.CHECK || task.type === CONST.TASK_TYPE.APPEND) &&
96
+ _haveAtLeastOneSameItem(
97
+ task.content.map((content) => String(content.dishSnapshot._id)),
98
+ buffetCombosItems.dishes.map((dish) => String(dish.dishId)),
99
+ ),
100
+ );
101
+ if (previousBuffetSubmitTasks.length === 0) {
102
+ secondsToNextTurn = 0;
103
+ } else if (previousBuffetSubmitTasks.length >= maxRounds) {
104
+ secondsToNextTurn = Infinity;
105
+ } else {
106
+ const lastBuffetSubmitTime = previousBuffetSubmitTasks[previousBuffetSubmitTasks.length - 1].date;
107
+ secondsToNextTurn = interval * 60 - Math.floor((Date.now() - new Date(lastBuffetSubmitTime).getTime()) / 1000);
108
+ }
109
+ return {
110
+ roundCount: previousBuffetSubmitTasks.length,
111
+ secondsToNextTurn,
112
+ maxRounds,
113
+ };
114
+ }
115
+
116
+ /**
117
+ * @param arr1
118
+ * @param arr2
119
+ */
120
+ function _haveAtLeastOneSameItem<T>(arr1: T[], arr2: T[]): boolean {
121
+ const set1 = new Set(arr1);
122
+ return arr2.some((item) => set1.has(item));
123
+ }