@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,43 +1,43 @@
1
- export interface Subscription {
2
- base: {
3
- expires: string | Date;
4
- permanent: boolean;
5
- note?: string;
6
- activation?: Activation;
7
- };
8
- waiter: {
9
- expires: string | Date;
10
- permanent: boolean;
11
- };
12
- kds: {
13
- expires: string | Date;
14
- permanent: boolean;
15
- };
16
- baseTakeaway: {
17
- expires: string | Date;
18
- permanent: boolean;
19
- };
20
- multiLanguage: {
21
- expires: string | Date;
22
- permanent: boolean;
23
- allow: string[];
24
- };
25
- superMultiLanguage: {
26
- expires: string | Date;
27
- permanent: boolean;
28
- };
29
- }
30
- export interface Activation {
31
- readonly receptionPrinterCountLimit: number;
32
- readonly chefPrinterCountLimit: number;
33
- readonly labelPrinterCountLimit: number;
34
- readonly dishCountLimit: number;
35
- readonly tableCountLimit: number;
36
- readonly memberFunction: boolean;
37
- readonly deliveryFunction: boolean;
38
- readonly buffetFunction: boolean;
39
- readonly waiterCountLimit: number;
40
- readonly kdsCountLimit: number;
41
- readonly multiLanguageCountLimit: number;
42
- readonly renewPrice: number;
43
- }
1
+ export interface Subscription {
2
+ base: {
3
+ expires: string | Date;
4
+ permanent: boolean;
5
+ note?: string;
6
+ activation?: Activation;
7
+ };
8
+ waiter: {
9
+ expires: string | Date;
10
+ permanent: boolean;
11
+ };
12
+ kds: {
13
+ expires: string | Date;
14
+ permanent: boolean;
15
+ };
16
+ baseTakeaway: {
17
+ expires: string | Date;
18
+ permanent: boolean;
19
+ };
20
+ multiLanguage: {
21
+ expires: string | Date;
22
+ permanent: boolean;
23
+ allow: string[];
24
+ };
25
+ superMultiLanguage: {
26
+ expires: string | Date;
27
+ permanent: boolean;
28
+ };
29
+ }
30
+ export interface Activation {
31
+ readonly receptionPrinterCountLimit: number;
32
+ readonly chefPrinterCountLimit: number;
33
+ readonly labelPrinterCountLimit: number;
34
+ readonly dishCountLimit: number;
35
+ readonly tableCountLimit: number;
36
+ readonly memberFunction: boolean;
37
+ readonly deliveryFunction: boolean;
38
+ readonly buffetFunction: boolean;
39
+ readonly waiterCountLimit: number;
40
+ readonly kdsCountLimit: number;
41
+ readonly multiLanguageCountLimit: number;
42
+ readonly renewPrice: number;
43
+ }
@@ -1,139 +1,139 @@
1
- import { YeepayTypeEnum } from '../../enum/yeepay.enum';
2
- import { FromEnum } from '../../enum/from.enum';
3
- import { UserStatusEnum } from '../../enum/user-status.enum';
4
- import { PayCompanyEnum } from '../../enum/pay-company.enum';
5
- export interface CertificatePath {
6
- origin: string;
7
- yeepay: string;
8
- fubei: string;
9
- }
10
- export interface UserSafe {
11
- readonly mobile?: string;
12
- readonly email?: string;
13
- readonly countryCode: string;
14
- readonly password: string;
15
- readonly salt: string;
16
- readonly _id: string;
17
- readonly deviceId: string;
18
- readonly arrearsCountdown: number;
19
- readonly online: boolean;
20
- readonly clientId: string;
21
- readonly originAgentId: string;
22
- readonly responseAgentId: string;
23
- readonly status: UserStatusEnum;
24
- readonly abandonReason: string;
25
- readonly lostReason: string;
26
- readonly from: FromEnum;
27
- readonly visitCycle: number;
28
- readonly purchased: boolean;
29
- readonly disabled: boolean;
30
- readonly geoIp: {
31
- ip: string;
32
- city: string;
33
- region: string;
34
- country: string;
35
- loc: string;
36
- org: string;
37
- postal: string;
38
- timezone: string;
39
- lastUpdateDate: Date;
40
- };
41
- }
42
- export interface User extends UserSafe {
43
- readonly certificate: {
44
- IDCARD_FRONT: CertificatePath;
45
- IDCARD_BACK: CertificatePath;
46
- UNI_CREDIT_CODE: CertificatePath;
47
- OP_BANK_CODE: CertificatePath;
48
- HAND_IDCARD: CertificatePath;
49
- SETTLE_BANKCARD: CertificatePath;
50
- CORP_CODE: CertificatePath;
51
- BUSINESS_PLACE: CertificatePath;
52
- BUSINESS_SITE: CertificatePath;
53
- CASHIER_SCENE: CertificatePath;
54
- OTHER_IDCARD_FRONT?: CertificatePath;
55
- OTHER_IDCARD_BACK?: CertificatePath;
56
- OTHER_AUTH_PHOTO?: CertificatePath;
57
- FOOD_SAFETY_LICENSE?: CertificatePath;
58
- };
59
- readonly realInfo: {
60
- type: YeepayTypeEnum;
61
- toOther: boolean;
62
- legalName: string;
63
- merLegalPhone: string;
64
- legalIdCard: string;
65
- merAddress: string;
66
- merProvince: string;
67
- merCity: string;
68
- merDistrict: string;
69
- cardNo: string;
70
- merFullName: string;
71
- merShortName: string;
72
- merCertNo: string;
73
- merCertType: string;
74
- merContactName: string;
75
- merContactPhone: string;
76
- accountLicense: string;
77
- headBankCode: string;
78
- bankCode: string;
79
- serviceTel: string;
80
- contactName: string;
81
- contactPhone: string;
82
- contactMobile: string;
83
- contactEmail: string;
84
- contactType: string;
85
- bankCardPhone: string;
86
- toOtherName?: string;
87
- toOtherIdCard?: string;
88
- licenseTimeBegin: string;
89
- licenseTimeEnd: string;
90
- legalTimeBegin?: string;
91
- legalTimeEnd?: string;
92
- merCertAddress?: string;
93
- };
94
- readonly pay: {
95
- active: boolean;
96
- company: PayCompanyEnum;
97
- };
98
- readonly yeepay: {
99
- payRate: number;
100
- userEditLock: boolean;
101
- merchantNo: string;
102
- merNetInOutStatus: string;
103
- merNetInOutStatusRemark: string;
104
- merHmacKey: string;
105
- reportStatus: string;
106
- configStatus: string;
107
- active: boolean;
108
- };
109
- readonly fubei: {
110
- payRate: number;
111
- merchant_id: number; // 付呗商户号
112
- merchant_code: string; // 付呗登陆账号
113
- app_id: string;
114
- app_secret: string;
115
- store_id: number; // 门店id
116
- sub_mch_id: string; // 当前渠道下对应的微信子商户号
117
- alipay_msid: string; // 当前渠道下对应的支付宝子商户号
118
- merchant_status: number; // 商户实名认证状态:0 未认证、1 认证中、2 认证成功、3 认证失败
119
- wechat_auth_status: string; // 商户微信认证状态:UNAUTHORIZED 未认证、AUTHORIZED 已认证、UNKNOWN 未知
120
- store_status: number; // 门店状态:1 待审核、2 审核通过、3 审核驳回
121
- error_msg: string; // 错误信息
122
- };
123
- readonly mpAlipay?: {
124
- authAppId: string;
125
- componentAppId: string;
126
- appRefreshToken: string;
127
- appAuthToken: string;
128
- templateVersion: string;
129
- pid: string;
130
- };
131
- readonly mpWechat?: {
132
- fasteRegisterStatus: string;
133
- fasteRegisterMsg: string;
134
- authAppId: string;
135
- componentAppId: string;
136
- appRefreshToken: string;
137
- templateVersion: string;
138
- };
139
- }
1
+ import { YeepayTypeEnum } from '../../enum/yeepay.enum';
2
+ import { FromEnum } from '../../enum/from.enum';
3
+ import { UserStatusEnum } from '../../enum/user-status.enum';
4
+ import { PayCompanyEnum } from '../../enum/pay-company.enum';
5
+ export interface CertificatePath {
6
+ origin: string;
7
+ yeepay: string;
8
+ fubei: string;
9
+ }
10
+ export interface UserSafe {
11
+ readonly mobile?: string;
12
+ readonly email?: string;
13
+ readonly countryCode: string;
14
+ readonly password: string;
15
+ readonly salt: string;
16
+ readonly _id: string;
17
+ readonly deviceId: string;
18
+ readonly arrearsCountdown: number;
19
+ readonly online: boolean;
20
+ readonly clientId: string;
21
+ readonly originAgentId: string;
22
+ readonly responseAgentId: string;
23
+ readonly status: UserStatusEnum;
24
+ readonly abandonReason: string;
25
+ readonly lostReason: string;
26
+ readonly from: FromEnum;
27
+ readonly visitCycle: number;
28
+ readonly purchased: boolean;
29
+ readonly disabled: boolean;
30
+ readonly geoIp: {
31
+ ip: string;
32
+ city: string;
33
+ region: string;
34
+ country: string;
35
+ loc: string;
36
+ org: string;
37
+ postal: string;
38
+ timezone: string;
39
+ lastUpdateDate: Date;
40
+ };
41
+ }
42
+ export interface User extends UserSafe {
43
+ readonly certificate: {
44
+ IDCARD_FRONT: CertificatePath;
45
+ IDCARD_BACK: CertificatePath;
46
+ UNI_CREDIT_CODE: CertificatePath;
47
+ OP_BANK_CODE: CertificatePath;
48
+ HAND_IDCARD: CertificatePath;
49
+ SETTLE_BANKCARD: CertificatePath;
50
+ CORP_CODE: CertificatePath;
51
+ BUSINESS_PLACE: CertificatePath;
52
+ BUSINESS_SITE: CertificatePath;
53
+ CASHIER_SCENE: CertificatePath;
54
+ OTHER_IDCARD_FRONT?: CertificatePath;
55
+ OTHER_IDCARD_BACK?: CertificatePath;
56
+ OTHER_AUTH_PHOTO?: CertificatePath;
57
+ FOOD_SAFETY_LICENSE?: CertificatePath;
58
+ };
59
+ readonly realInfo: {
60
+ type: YeepayTypeEnum;
61
+ toOther: boolean;
62
+ legalName: string;
63
+ merLegalPhone: string;
64
+ legalIdCard: string;
65
+ merAddress: string;
66
+ merProvince: string;
67
+ merCity: string;
68
+ merDistrict: string;
69
+ cardNo: string;
70
+ merFullName: string;
71
+ merShortName: string;
72
+ merCertNo: string;
73
+ merCertType: string;
74
+ merContactName: string;
75
+ merContactPhone: string;
76
+ accountLicense: string;
77
+ headBankCode: string;
78
+ bankCode: string;
79
+ serviceTel: string;
80
+ contactName: string;
81
+ contactPhone: string;
82
+ contactMobile: string;
83
+ contactEmail: string;
84
+ contactType: string;
85
+ bankCardPhone: string;
86
+ toOtherName?: string;
87
+ toOtherIdCard?: string;
88
+ licenseTimeBegin: string;
89
+ licenseTimeEnd: string;
90
+ legalTimeBegin?: string;
91
+ legalTimeEnd?: string;
92
+ merCertAddress?: string;
93
+ };
94
+ readonly pay: {
95
+ active: boolean;
96
+ company: PayCompanyEnum;
97
+ };
98
+ readonly yeepay: {
99
+ payRate: number;
100
+ userEditLock: boolean;
101
+ merchantNo: string;
102
+ merNetInOutStatus: string;
103
+ merNetInOutStatusRemark: string;
104
+ merHmacKey: string;
105
+ reportStatus: string;
106
+ configStatus: string;
107
+ active: boolean;
108
+ };
109
+ readonly fubei: {
110
+ payRate: number;
111
+ merchant_id: number; // 付呗商户号
112
+ merchant_code: string; // 付呗登陆账号
113
+ app_id: string;
114
+ app_secret: string;
115
+ store_id: number; // 门店id
116
+ sub_mch_id: string; // 当前渠道下对应的微信子商户号
117
+ alipay_msid: string; // 当前渠道下对应的支付宝子商户号
118
+ merchant_status: number; // 商户实名认证状态:0 未认证、1 认证中、2 认证成功、3 认证失败
119
+ wechat_auth_status: string; // 商户微信认证状态:UNAUTHORIZED 未认证、AUTHORIZED 已认证、UNKNOWN 未知
120
+ store_status: number; // 门店状态:1 待审核、2 审核通过、3 审核驳回
121
+ error_msg: string; // 错误信息
122
+ };
123
+ readonly mpAlipay?: {
124
+ authAppId: string;
125
+ componentAppId: string;
126
+ appRefreshToken: string;
127
+ appAuthToken: string;
128
+ templateVersion: string;
129
+ pid: string;
130
+ };
131
+ readonly mpWechat?: {
132
+ fasteRegisterStatus: string;
133
+ fasteRegisterMsg: string;
134
+ authAppId: string;
135
+ componentAppId: string;
136
+ appRefreshToken: string;
137
+ templateVersion: string;
138
+ };
139
+ }
@@ -1,17 +1,17 @@
1
- export interface VisitTask {
2
- readonly _id: string;
3
- readonly userId: string;
4
- readonly createDate: string | Date;
5
- readonly effectiveDate: string | Date;
6
- readonly endDate: string | Date;
7
- readonly status: string;
8
- readonly countryCode: string;
9
- readonly mobile: string;
10
- readonly storeId: string;
11
- readonly storeName: string;
12
- readonly storeCreateDate: string | Date;
13
- readonly userStatus: string;
14
- readonly type: string;
15
- readonly result: string;
16
- readonly fileList: string[];
17
- }
1
+ export interface VisitTask {
2
+ readonly _id: string;
3
+ readonly userId: string;
4
+ readonly createDate: string | Date;
5
+ readonly effectiveDate: string | Date;
6
+ readonly endDate: string | Date;
7
+ readonly status: string;
8
+ readonly countryCode: string;
9
+ readonly mobile: string;
10
+ readonly storeId: string;
11
+ readonly storeName: string;
12
+ readonly storeCreateDate: string | Date;
13
+ readonly userStatus: string;
14
+ readonly type: string;
15
+ readonly result: string;
16
+ readonly fileList: string[];
17
+ }
@@ -0,0 +1,72 @@
1
+ import { calcLeft, calcReceivablePrice, CONST, Order, TaxTypeEnum } from '../index';
2
+ import { order as taxOrder } from '../../josn-hub/orders/tax-order';
3
+
4
+ /**
5
+ * @param withTax
6
+ */
7
+ function createOrder(withTax = false): Order {
8
+ return {
9
+ ...taxOrder,
10
+ checkout: [],
11
+ content: [
12
+ {
13
+ ...taxOrder.content[0],
14
+ count: 1,
15
+ dishSnapshot: {
16
+ ...taxOrder.content[0].dishSnapshot,
17
+ price: 123,
18
+ selectedSpecifications: [],
19
+ noFullOrderDiscount: false,
20
+ taxes: withTax ? [{ name: 'Tax', rate: 0.11 }] : [],
21
+ },
22
+ },
23
+ ],
24
+ taxType: TaxTypeEnum.PriceNoTaxBindDish,
25
+ };
26
+ }
27
+
28
+ describe('currency settlement precision', () => {
29
+ it.each(CONST.LARGE_CURRENCY)('floors all fractional boundaries for %s', (currency) => {
30
+ [0.01, 0.49, 0.5, 0.99].forEach((fraction) => {
31
+ expect(calcLeft(123 + fraction, 0, currency)).toBe(123);
32
+ });
33
+ });
34
+
35
+ it('keeps discount and tax precision until settling the final balance', () => {
36
+ const discount = [{ type: CONST.RECEIVABLE_PROCESSING_TYPE.DISCOUNT.TYPE, value: 7.7 }];
37
+ const discounted = calcReceivablePrice(createOrder(), discount);
38
+ expect(discounted.receivablePrice).toBe(94.71);
39
+ expect(calcLeft(discounted.receivablePrice, 0, '¥')).toBe(94);
40
+
41
+ const taxed = calcReceivablePrice(createOrder(true), []);
42
+ expect(taxed.receivablePrice).toBe(136.53);
43
+ expect(calcLeft(taxed.receivablePrice, 0, '¥')).toBe(136);
44
+
45
+ const both = calcReceivablePrice(createOrder(true), discount);
46
+ expect(both.taxArr).toEqual([{ name: 'Tax(11%)', volume: 10.42 }]);
47
+ expect(both.receivablePrice).toBe(105.13);
48
+ expect(calcLeft(both.receivablePrice, 0, '¥')).toBe(105);
49
+ });
50
+
51
+ it('settles partial payments and change using integer amounts', () => {
52
+ expect(calcLeft(94.71, 40, '¥')).toBe(54);
53
+ expect(calcLeft(94.71, 94, '¥')).toBe(0);
54
+ expect(calcLeft(100, calcLeft(94.71, 0, '¥'))).toBe(6);
55
+ });
56
+
57
+ it('preserves historical fractional payments before settling the remaining balance', () => {
58
+ expect(calcLeft(94.71, 40.71, '¥')).toBe(54);
59
+ expect(calcLeft(94.71, 94.71, '¥')).toBe(0);
60
+ expect(calcLeft(94.71, 95, '¥')).toBe(-1);
61
+ });
62
+
63
+ it('does not hide a negative balance smaller than one unit', () => {
64
+ expect(calcLeft(0, 0.01, '¥')).toBe(-1);
65
+ });
66
+
67
+ it('preserves two-decimal precision for ordinary currencies and existing callers', () => {
68
+ expect(calcLeft(94.71, 40, '$')).toBe(54.71);
69
+ expect(calcLeft(94.71, 40)).toBe(54.71);
70
+ expect(calcLeft(100.5, 94.71, '$')).toBe(5.79);
71
+ });
72
+ });
@@ -1,91 +1,91 @@
1
- import {
2
- DishType,
3
- Order,
4
- CONST,
5
- getNameFromNames,
6
- Content,
7
- calcBuffetTotalPrice,
8
- calcContentPrice,
9
- OrderTypeEnum,
10
- } from '../index';
11
-
12
- export interface PrinteDishInfo {
13
- name: string;
14
- count: number;
15
- price: number;
16
- specifications: string[];
17
- note?: string;
18
- }
19
-
20
- /**
21
- *
22
- */
23
- export function getDishArrFromContents({
24
- contents,
25
- lang,
26
- order,
27
- showBuffet,
28
- text,
29
- addSpecificationsAfterName,
30
- }: {
31
- contents: Content[];
32
- lang: string;
33
- order: Order;
34
- showBuffet?: boolean;
35
- text?: {
36
- adult: string;
37
- child: string;
38
- };
39
- addSpecificationsAfterName?: boolean;
40
- }): PrinteDishInfo[] {
41
- const result: PrinteDishInfo[] = contents.map((dishGroup) => {
42
- const selectedNames = [];
43
- dishGroup.dishSnapshot.selectedSpecifications.forEach((selectedItems) => {
44
- selectedItems.content.forEach((tag) => {
45
- selectedNames.push(tag.name);
46
- });
47
- });
48
- let name = getNameFromNames(dishGroup.dishSnapshot.names, lang, CONST.DEFALUT_LANGUAGE) || '';
49
- if (dishGroup.dishSnapshot.type === DishType.Weigh) {
50
- name += `(${dishGroup.weight}${
51
- getNameFromNames(dishGroup.dishSnapshot.units, lang, CONST.DEFALUT_LANGUAGE) || ''
52
- })`;
53
- }
54
- return {
55
- name,
56
- count: dishGroup.count,
57
- price:
58
- calcContentPrice({
59
- orderContentItem: dishGroup,
60
- buffetItem: order.buffet?.snapshot,
61
- orderType: order.type,
62
- adultNum: order.adultNum,
63
- childNum: order.childNum,
64
- contents: order.content,
65
- }) / dishGroup.count,
66
- specifications: selectedNames,
67
- note: dishGroup.note,
68
- };
69
- });
70
- if (showBuffet && order.type === OrderTypeEnum.Buffet) {
71
- const specifications = [];
72
- if (order.adultNum) {
73
- specifications.push(`${text?.adult}${order.adultNum}`);
74
- }
75
- if (order.childNum) {
76
- specifications.push(`${text?.child}${order.childNum}`);
77
- }
78
- result.unshift({
79
- name: getNameFromNames(order.buffet.snapshot.names, lang, CONST.DEFALUT_LANGUAGE),
80
- count: 1,
81
- price: calcBuffetTotalPrice(order.buffet.snapshot, order.adultNum, order.childNum),
82
- specifications: specifications,
83
- });
84
- }
85
- if (addSpecificationsAfterName) {
86
- result.forEach((item) => {
87
- item.name += item.specifications.length > 0 ? `(${item.specifications.join()})` : '';
88
- });
89
- }
90
- return result;
91
- }
1
+ import {
2
+ DishType,
3
+ Order,
4
+ CONST,
5
+ getNameFromNames,
6
+ Content,
7
+ calcBuffetTotalPrice,
8
+ calcContentPrice,
9
+ OrderTypeEnum,
10
+ } from '../index';
11
+
12
+ export interface PrinteDishInfo {
13
+ name: string;
14
+ count: number;
15
+ price: number;
16
+ specifications: string[];
17
+ note?: string;
18
+ }
19
+
20
+ /**
21
+ *
22
+ */
23
+ export function getDishArrFromContents({
24
+ contents,
25
+ lang,
26
+ order,
27
+ showBuffet,
28
+ text,
29
+ addSpecificationsAfterName,
30
+ }: {
31
+ contents: Content[];
32
+ lang: string;
33
+ order: Order;
34
+ showBuffet?: boolean;
35
+ text?: {
36
+ adult: string;
37
+ child: string;
38
+ };
39
+ addSpecificationsAfterName?: boolean;
40
+ }): PrinteDishInfo[] {
41
+ const result: PrinteDishInfo[] = contents.map((dishGroup) => {
42
+ const selectedNames = [];
43
+ dishGroup.dishSnapshot.selectedSpecifications.forEach((selectedItems) => {
44
+ selectedItems.content.forEach((tag) => {
45
+ selectedNames.push(tag.name);
46
+ });
47
+ });
48
+ let name = getNameFromNames(dishGroup.dishSnapshot.names, lang, CONST.DEFALUT_LANGUAGE) || '';
49
+ if (dishGroup.dishSnapshot.type === DishType.Weigh) {
50
+ name += `(${dishGroup.weight}${
51
+ getNameFromNames(dishGroup.dishSnapshot.units, lang, CONST.DEFALUT_LANGUAGE) || ''
52
+ })`;
53
+ }
54
+ return {
55
+ name,
56
+ count: dishGroup.count,
57
+ price:
58
+ calcContentPrice({
59
+ orderContentItem: dishGroup,
60
+ buffetItem: order.buffet?.snapshot,
61
+ orderType: order.type,
62
+ adultNum: order.adultNum,
63
+ childNum: order.childNum,
64
+ contents: order.content,
65
+ }) / dishGroup.count,
66
+ specifications: selectedNames,
67
+ note: dishGroup.note,
68
+ };
69
+ });
70
+ if (showBuffet && order.type === OrderTypeEnum.Buffet) {
71
+ const specifications = [];
72
+ if (order.adultNum) {
73
+ specifications.push(`${text?.adult}${order.adultNum}`);
74
+ }
75
+ if (order.childNum) {
76
+ specifications.push(`${text?.child}${order.childNum}`);
77
+ }
78
+ result.unshift({
79
+ name: getNameFromNames(order.buffet.snapshot.names, lang, CONST.DEFALUT_LANGUAGE),
80
+ count: 1,
81
+ price: calcBuffetTotalPrice(order.buffet.snapshot, order.adultNum, order.childNum),
82
+ specifications: specifications,
83
+ });
84
+ }
85
+ if (addSpecificationsAfterName) {
86
+ result.forEach((item) => {
87
+ item.name += item.specifications.length > 0 ? `(${item.specifications.join()})` : '';
88
+ });
89
+ }
90
+ return result;
91
+ }