@pisell/pisellos 0.0.567 → 0.0.568

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 (228) hide show
  1. package/dist/core/index.js +6 -9
  2. package/dist/model/strategy/adapter/walletPass/evaluator.js +0 -2
  3. package/dist/model/strategy/adapter/walletPass/example.js +3 -26
  4. package/dist/model/strategy/adapter/walletPass/utils.js +0 -3
  5. package/dist/model/strategy/strategy-example.js +5 -19
  6. package/dist/modules/Cart/index.js +0 -3
  7. package/dist/modules/Cart/utils/cartProduct.js +0 -1
  8. package/dist/modules/Date/index.js +1 -5
  9. package/dist/modules/Discount/index.js +1 -4
  10. package/dist/modules/OpenData/index.js +0 -2
  11. package/dist/modules/Order/index.d.ts +1 -1
  12. package/dist/modules/Order/index.js +14 -41
  13. package/dist/modules/Payment/index.js +142 -270
  14. package/dist/modules/Payment/walletpass.js +4 -5
  15. package/dist/modules/Rules/index.js +0 -7
  16. package/dist/modules/Schedule/utils.js +0 -1
  17. package/dist/modules/Step/index.js +0 -1
  18. package/dist/plugins/request.js +1 -4
  19. package/dist/plugins/window.js +2 -6
  20. package/dist/server/index.js +88 -121
  21. package/dist/server/modules/menu/index.js +32 -41
  22. package/dist/server/modules/products/index.js +29 -49
  23. package/dist/server/modules/quotation/index.js +29 -38
  24. package/dist/server/modules/resource/index.js +3 -4
  25. package/dist/server/modules/schedule/index.js +32 -40
  26. package/dist/server/utils/product.js +0 -1
  27. package/dist/solution/BookingByStep/index.d.ts +1 -1
  28. package/dist/solution/BookingByStep/index.js +7 -59
  29. package/dist/solution/BookingByStep/utils/capacity.js +1 -11
  30. package/dist/solution/BookingByStep/utils/resources.js +1 -3
  31. package/dist/solution/BookingByStep/utils/timeslots.js +2 -43
  32. package/dist/solution/BookingTicket/index.d.ts +1 -1
  33. package/dist/solution/BookingTicket/index.js +5 -7
  34. package/dist/solution/BookingTicket/utils/scan/handleScan.js +25 -31
  35. package/dist/solution/BookingTicket/utils/scan/index.js +6 -10
  36. package/dist/solution/BuyTickets/index.js +9 -12
  37. package/dist/solution/Checkout/index.js +177 -246
  38. package/dist/solution/Checkout/utils/index.js +4 -16
  39. package/dist/solution/RegisterAndLogin/index.js +30 -76
  40. package/dist/solution/ScanOrder/index.js +50 -60
  41. package/dist/solution/ShopDiscount/index.js +2 -7
  42. package/dist/solution/VenueBooking/index.d.ts +5 -0
  43. package/dist/solution/VenueBooking/index.js +364 -327
  44. package/dist/utils/task.js +15 -18
  45. package/dist/utils/watch.js +0 -1
  46. package/lib/apis/picoding.js +2 -0
  47. package/lib/core/index.js +130 -131
  48. package/lib/effects/index.js +46 -57
  49. package/lib/index.js +92 -53
  50. package/lib/model/index.js +14 -21
  51. package/lib/model/strategy/adapter/dataVariant/adapter.js +38 -50
  52. package/lib/model/strategy/adapter/dataVariant/evaluator.js +162 -236
  53. package/lib/model/strategy/adapter/dataVariant/examples.js +229 -237
  54. package/lib/model/strategy/adapter/dataVariant/index.js +39 -34
  55. package/lib/model/strategy/adapter/dataVariant/type.js +57 -28
  56. package/lib/model/strategy/adapter/index.js +100 -64
  57. package/lib/model/strategy/adapter/itemRule/adapter.js +156 -144
  58. package/lib/model/strategy/adapter/itemRule/evaluator.js +36 -48
  59. package/lib/model/strategy/adapter/itemRule/examples.js +295 -225
  60. package/lib/model/strategy/adapter/itemRule/index.js +83 -57
  61. package/lib/model/strategy/adapter/itemRule/type.js +97 -36
  62. package/lib/model/strategy/adapter/promotion/adapter.js +84 -63
  63. package/lib/model/strategy/adapter/promotion/evaluator.js +381 -231
  64. package/lib/model/strategy/adapter/promotion/examples.js +139 -159
  65. package/lib/model/strategy/adapter/promotion/index.js +1 -49
  66. package/lib/model/strategy/adapter/promotion/type.js +199 -35
  67. package/lib/model/strategy/adapter/type.js +4 -16
  68. package/lib/model/strategy/adapter/walletPass/evaluator.js +180 -152
  69. package/lib/model/strategy/adapter/walletPass/example.js +217 -190
  70. package/lib/model/strategy/adapter/walletPass/index.js +75 -51
  71. package/lib/model/strategy/adapter/walletPass/locales.js +36 -58
  72. package/lib/model/strategy/adapter/walletPass/type.js +4 -16
  73. package/lib/model/strategy/adapter/walletPass/utils.js +652 -402
  74. package/lib/model/strategy/engine.js +270 -168
  75. package/lib/model/strategy/index.js +49 -34
  76. package/lib/model/strategy/strategy-example.js +243 -239
  77. package/lib/model/strategy/type.js +100 -40
  78. package/lib/modules/Account/index.js +39 -53
  79. package/lib/modules/Account/types.js +20 -33
  80. package/lib/modules/AccountList/index.js +116 -154
  81. package/lib/modules/AccountList/types.js +30 -31
  82. package/lib/modules/AccountList/utils.js +18 -30
  83. package/lib/modules/BaseModule.js +22 -45
  84. package/lib/modules/Cart/index.js +170 -124
  85. package/lib/modules/Cart/types.js +46 -51
  86. package/lib/modules/Cart/utils/cartAccount.js +40 -39
  87. package/lib/modules/Cart/utils/cartDate.js +56 -61
  88. package/lib/modules/Cart/utils/cartDiscount.js +28 -33
  89. package/lib/modules/Cart/utils/cartNote.js +27 -32
  90. package/lib/modules/Cart/utils/cartProduct.js +306 -241
  91. package/lib/modules/Cart/utils/cartRelationForms.js +29 -35
  92. package/lib/modules/Cart/utils/cartResource.js +72 -78
  93. package/lib/modules/Cart/utils/changePrice.js +26 -62
  94. package/lib/modules/Cart/utils/index.js +106 -48
  95. package/lib/modules/Customer/constants.js +13 -34
  96. package/lib/modules/Customer/index.js +216 -153
  97. package/lib/modules/Customer/types.js +38 -35
  98. package/lib/modules/Date/index.js +116 -115
  99. package/lib/modules/Date/types.js +16 -28
  100. package/lib/modules/Date/utils.js +174 -123
  101. package/lib/modules/Discount/index.js +117 -113
  102. package/lib/modules/Discount/types.js +9 -31
  103. package/lib/modules/Guests/index.js +30 -56
  104. package/lib/modules/Guests/types.js +23 -33
  105. package/lib/modules/Holder/index.js +209 -189
  106. package/lib/modules/Holder/types.js +4 -16
  107. package/lib/modules/Holder/utils.js +20 -49
  108. package/lib/modules/OpenData/index.js +63 -74
  109. package/lib/modules/OpenData/types.js +4 -16
  110. package/lib/modules/OpenData/utils.js +44 -78
  111. package/lib/modules/Order/index.d.ts +1 -1
  112. package/lib/modules/Order/index.js +332 -320
  113. package/lib/modules/Order/types.js +24 -33
  114. package/lib/modules/Order/utils.js +350 -284
  115. package/lib/modules/Payment/cash.js +20 -33
  116. package/lib/modules/Payment/cashRecommendationAlgorithm.js +145 -76
  117. package/lib/modules/Payment/eftpos.js +16 -30
  118. package/lib/modules/Payment/index.js +566 -432
  119. package/lib/modules/Payment/mx51.js +1 -0
  120. package/lib/modules/Payment/types.js +216 -107
  121. package/lib/modules/Payment/utils.js +50 -47
  122. package/lib/modules/Payment/walletpass.js +221 -203
  123. package/lib/modules/Product/index.js +51 -46
  124. package/lib/modules/Product/types.js +4 -16
  125. package/lib/modules/Product/utils.js +32 -33
  126. package/lib/modules/ProductList/index.js +111 -110
  127. package/lib/modules/ProductList/types.js +9 -31
  128. package/lib/modules/Quotation/index.js +60 -82
  129. package/lib/modules/Quotation/types.js +4 -16
  130. package/lib/modules/Resource/index.js +27 -59
  131. package/lib/modules/Resource/types.js +22 -32
  132. package/lib/modules/Resource/utils.js +30 -38
  133. package/lib/modules/Rules/index.js +1172 -872
  134. package/lib/modules/Rules/types.js +17 -40
  135. package/lib/modules/SalesSummary/index.js +59 -68
  136. package/lib/modules/SalesSummary/types.js +4 -16
  137. package/lib/modules/SalesSummary/utils.js +176 -193
  138. package/lib/modules/ScanOrderLogger/index.js +59 -79
  139. package/lib/modules/ScanOrderLogger/providers/feishu.js +54 -78
  140. package/lib/modules/ScanOrderLogger/providers/grafana.js +13 -36
  141. package/lib/modules/ScanOrderLogger/types.js +4 -16
  142. package/lib/modules/Schedule/getDateIsInSchedule.js +334 -167
  143. package/lib/modules/Schedule/index.js +97 -107
  144. package/lib/modules/Schedule/type.js +4 -16
  145. package/lib/modules/Schedule/types.js +4 -16
  146. package/lib/modules/Schedule/utils.js +433 -291
  147. package/lib/modules/Step/index.js +40 -52
  148. package/lib/modules/Step/tyeps.js +4 -16
  149. package/lib/modules/Summary/index.js +66 -70
  150. package/lib/modules/Summary/types.js +4 -16
  151. package/lib/modules/Summary/utils.js +782 -429
  152. package/lib/modules/index.js +212 -57
  153. package/lib/plugins/app.js +4 -16
  154. package/lib/plugins/index.js +36 -25
  155. package/lib/plugins/request.js +137 -126
  156. package/lib/plugins/shopStore.js +4 -16
  157. package/lib/plugins/user.js +4 -16
  158. package/lib/plugins/window.js +171 -179
  159. package/lib/server/index.js +882 -623
  160. package/lib/server/modules/index.js +85 -59
  161. package/lib/server/modules/menu/index.js +146 -122
  162. package/lib/server/modules/menu/types.js +18 -31
  163. package/lib/server/modules/order/index.js +195 -231
  164. package/lib/server/modules/order/types.js +107 -32
  165. package/lib/server/modules/order/utils/filterBookings.js +174 -140
  166. package/lib/server/modules/order/utils/filterOrders.js +89 -60
  167. package/lib/server/modules/products/index.js +430 -335
  168. package/lib/server/modules/products/types.js +41 -34
  169. package/lib/server/modules/quotation/index.js +76 -77
  170. package/lib/server/modules/quotation/types.js +21 -31
  171. package/lib/server/modules/resource/index.js +216 -187
  172. package/lib/server/modules/resource/types.js +42 -33
  173. package/lib/server/modules/schedule/index.js +134 -119
  174. package/lib/server/modules/schedule/types.js +14 -21
  175. package/lib/server/modules/schedule/utils.js +334 -163
  176. package/lib/server/types.js +4 -16
  177. package/lib/server/utils/index.js +25 -23
  178. package/lib/server/utils/product.js +196 -139
  179. package/lib/server/utils/schedule.js +34 -41
  180. package/lib/server/utils/time.js +40 -49
  181. package/lib/solution/BookingByStep/index.d.ts +1 -1
  182. package/lib/solution/BookingByStep/index.js +1530 -1343
  183. package/lib/solution/BookingByStep/types.js +40 -99
  184. package/lib/solution/BookingByStep/utils/capacity.js +192 -160
  185. package/lib/solution/BookingByStep/utils/products.js +42 -52
  186. package/lib/solution/BookingByStep/utils/resources.js +527 -330
  187. package/lib/solution/BookingByStep/utils/stock.js +65 -44
  188. package/lib/solution/BookingByStep/utils/timeslots.js +129 -131
  189. package/lib/solution/BookingTicket/index.d.ts +1 -1
  190. package/lib/solution/BookingTicket/index.js +147 -122
  191. package/lib/solution/BookingTicket/types.js +38 -64
  192. package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +64 -80
  193. package/lib/solution/BookingTicket/utils/scan/handleScan.js +82 -80
  194. package/lib/solution/BookingTicket/utils/scan/index.js +90 -94
  195. package/lib/solution/BookingTicket/utils/scan/scanCache.js +90 -43
  196. package/lib/solution/BuyTickets/index.js +67 -70
  197. package/lib/solution/BuyTickets/types.js +22 -38
  198. package/lib/solution/Checkout/index.js +1451 -1158
  199. package/lib/solution/Checkout/types.js +91 -61
  200. package/lib/solution/Checkout/utils/index.js +227 -158
  201. package/lib/solution/PlaceOrder/index.js +55 -0
  202. package/lib/solution/RegisterAndLogin/config.js +493 -460
  203. package/lib/solution/RegisterAndLogin/index.js +633 -630
  204. package/lib/solution/RegisterAndLogin/types.js +189 -76
  205. package/lib/solution/RegisterAndLogin/utils.js +183 -125
  206. package/lib/solution/Sales/index.js +218 -200
  207. package/lib/solution/Sales/types.js +27 -33
  208. package/lib/solution/ScanOrder/index.js +803 -840
  209. package/lib/solution/ScanOrder/types.js +34 -34
  210. package/lib/solution/ScanOrder/utils.js +372 -331
  211. package/lib/solution/ShopDiscount/index.js +230 -236
  212. package/lib/solution/ShopDiscount/types.js +15 -37
  213. package/lib/solution/ShopDiscount/utils.js +309 -172
  214. package/lib/solution/VenueBooking/index.d.ts +5 -0
  215. package/lib/solution/VenueBooking/index.js +886 -929
  216. package/lib/solution/VenueBooking/types.js +20 -40
  217. package/lib/solution/VenueBooking/utils/dateSummary.js +22 -54
  218. package/lib/solution/VenueBooking/utils/resource.js +31 -54
  219. package/lib/solution/VenueBooking/utils/slotMerge.js +88 -106
  220. package/lib/solution/VenueBooking/utils/smartPricing.js +112 -100
  221. package/lib/solution/VenueBooking/utils/timeSlot.js +133 -132
  222. package/lib/solution/VenueBooking/utils.js +130 -67
  223. package/lib/solution/index.js +102 -37
  224. package/lib/store/createStore.js +32 -29
  225. package/lib/types/index.js +4 -16
  226. package/lib/utils/task.js +36 -36
  227. package/lib/utils/watch.js +81 -47
  228. package/package.json +2 -1
@@ -1,28 +1,23 @@
1
- var __defProp = Object.defineProperty;
2
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
- var __getOwnPropNames = Object.getOwnPropertyNames;
4
- var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- var __export = (target, all) => {
6
- for (var name in all)
7
- __defProp(target, name, { get: all[name], enumerable: true });
8
- };
9
- var __copyProps = (to, from, except, desc) => {
10
- if (from && typeof from === "object" || typeof from === "function") {
11
- for (let key of __getOwnPropNames(from))
12
- if (!__hasOwnProp.call(to, key) && key !== except)
13
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
- }
15
- return to;
16
- };
17
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
-
19
- // src/server/modules/order/utils/filterOrders.ts
20
- var filterOrders_exports = {};
21
- __export(filterOrders_exports, {
22
- filterOrders: () => filterOrders
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
23
5
  });
24
- module.exports = __toCommonJS(filterOrders_exports);
6
+ exports.filterOrders = filterOrders;
7
+ /**
8
+ * 订单过滤函数
9
+ * @param orders 原始订单列表
10
+ * @param filters 过滤条件
11
+ * @returns 过滤 + 排序 + 分页后的结果
12
+ *
13
+ * @优化口子 性能优化预留:
14
+ * - 可在此函数入口加缓存(按 filters 签名缓存结果)
15
+ * - 可对枚举字段建倒排索引(status/payment_status/shipping_status/customer_id)
16
+ * - 可对文本字段加前缀树或分词索引
17
+ * - 可做增量过滤而非全量遍历
18
+ */
25
19
  function filterOrders(orders, filters) {
20
+ // Bug 1 修复:防护 filters 为 null/undefined
26
21
  const safeFilters = filters || {};
27
22
  if (!orders || !Array.isArray(orders)) {
28
23
  return {
@@ -32,154 +27,192 @@ function filterOrders(orders, filters) {
32
27
  skip: 0
33
28
  };
34
29
  }
30
+
31
+ // 默认分页参数
35
32
  const size = safeFilters.num || 20;
36
33
  const page = safeFilters.skip || 1;
37
- let filteredList = orders.filter((order) => {
34
+
35
+ // 1. 过滤
36
+ let filteredList = orders.filter(order => {
37
+ // status - 订单状态
38
38
  if (safeFilters.status && safeFilters.status.length > 0) {
39
39
  if (!order.status || !safeFilters.status.includes(order.status)) {
40
40
  return false;
41
41
  }
42
42
  }
43
+
44
+ // payment_status - 支付状态
43
45
  if (safeFilters.payment_status && safeFilters.payment_status.length > 0) {
44
46
  if (!order.payment_status || !safeFilters.payment_status.includes(order.payment_status)) {
45
47
  return false;
46
48
  }
47
49
  }
50
+
51
+ // shipping_status - 处理状态
48
52
  if (safeFilters.shipping_status && safeFilters.shipping_status.length > 0) {
49
53
  if (!order.shipping_status || !safeFilters.shipping_status.includes(order.shipping_status)) {
50
54
  return false;
51
55
  }
52
56
  }
53
- if (safeFilters.customer_id !== void 0 && safeFilters.customer_id !== null) {
57
+
58
+ // customer_id - 客户ID(精确匹配)
59
+ if (safeFilters.customer_id !== undefined && safeFilters.customer_id !== null) {
54
60
  if (String(order.customer_id) !== String(safeFilters.customer_id)) {
55
61
  return false;
56
62
  }
57
63
  }
64
+
65
+ // order_sales_channel - 销售渠道
58
66
  if (safeFilters.order_sales_channel && safeFilters.order_sales_channel.length > 0) {
59
67
  if (!order.order_sales_channel || !safeFilters.order_sales_channel.includes(order.order_sales_channel)) {
60
68
  return false;
61
69
  }
62
70
  }
71
+
72
+ // payment_methods - 支付方式
63
73
  if (safeFilters.payment_methods && safeFilters.payment_methods.length > 0) {
64
74
  if (!order.payment_methods || !Array.isArray(order.payment_methods) || order.payment_methods.length === 0) {
65
75
  return false;
66
76
  }
67
- const hasMatch = order.payment_methods.some((pm) => safeFilters.payment_methods.includes(pm));
77
+ const hasMatch = order.payment_methods.some(pm => safeFilters.payment_methods.includes(pm));
68
78
  if (!hasMatch) {
69
79
  return false;
70
80
  }
71
81
  }
72
- if (safeFilters.min_total_amount !== void 0 || safeFilters.max_total_amount !== void 0) {
82
+
83
+ // min_total_amount / max_total_amount - 订单金额范围
84
+ if (safeFilters.min_total_amount !== undefined || safeFilters.max_total_amount !== undefined) {
73
85
  const orderAmount = parseFloat(String(order.total_amount || 0));
74
- if (safeFilters.min_total_amount !== void 0 && orderAmount < safeFilters.min_total_amount) {
86
+ if (safeFilters.min_total_amount !== undefined && orderAmount < safeFilters.min_total_amount) {
75
87
  return false;
76
88
  }
77
- if (safeFilters.max_total_amount !== void 0 && orderAmount > safeFilters.max_total_amount) {
89
+ if (safeFilters.max_total_amount !== undefined && orderAmount > safeFilters.max_total_amount) {
78
90
  return false;
79
91
  }
80
92
  }
93
+
94
+ // tag_ids - 标签(统一 String 比较,兼容 number/string)
81
95
  if (safeFilters.tag_ids && safeFilters.tag_ids.length > 0) {
82
96
  if (!order.tag_ids || !Array.isArray(order.tag_ids) || order.tag_ids.length === 0) {
83
97
  return false;
84
98
  }
85
99
  const filterTagSet = new Set(safeFilters.tag_ids.map(String));
86
- const hasMatch = order.tag_ids.some((tag) => filterTagSet.has(String(tag)));
100
+ const hasMatch = order.tag_ids.some(tag => filterTagSet.has(String(tag)));
87
101
  if (!hasMatch) {
88
102
  return false;
89
103
  }
90
104
  }
105
+
106
+ // shipping_type - 配送方式
91
107
  if (safeFilters.shipping_type && safeFilters.shipping_type.length > 0) {
92
108
  if (!order.shipping_type || !safeFilters.shipping_type.includes(order.shipping_type)) {
93
109
  return false;
94
110
  }
95
111
  }
96
- if (safeFilters.delivery_zone_name !== void 0 && safeFilters.delivery_zone_name !== null && safeFilters.delivery_zone_name !== "") {
112
+
113
+ // delivery_zone_name - 配送区域(模糊匹配)
114
+ if (safeFilters.delivery_zone_name !== undefined && safeFilters.delivery_zone_name !== null && safeFilters.delivery_zone_name !== '') {
97
115
  if (!order.delivery_zone_name || !order.delivery_zone_name.toLowerCase().includes(safeFilters.delivery_zone_name.toLowerCase())) {
98
116
  return false;
99
117
  }
100
118
  }
101
- if (safeFilters.location_id !== void 0 && safeFilters.location_id !== null) {
119
+
120
+ // location_id - 取货地点(精确匹配)
121
+ if (safeFilters.location_id !== undefined && safeFilters.location_id !== null) {
102
122
  if (String(order.location_id) !== String(safeFilters.location_id)) {
103
123
  return false;
104
124
  }
105
125
  }
106
- if (safeFilters.shipping_order_number !== void 0 && safeFilters.shipping_order_number !== null && safeFilters.shipping_order_number !== "") {
126
+
127
+ // shipping_order_number - 物流单号(模糊匹配)
128
+ if (safeFilters.shipping_order_number !== undefined && safeFilters.shipping_order_number !== null && safeFilters.shipping_order_number !== '') {
107
129
  if (!order.shipping_order_number || !order.shipping_order_number.toLowerCase().includes(safeFilters.shipping_order_number.toLowerCase())) {
108
130
  return false;
109
131
  }
110
132
  }
133
+
134
+ // logistics_company_id - 物流公司
111
135
  if (safeFilters.logistics_company_id && safeFilters.logistics_company_id.length > 0) {
112
136
  if (!order.logistics_company_id) {
113
137
  return false;
114
138
  }
115
139
  const orderLogisticsId = String(order.logistics_company_id);
116
- const hasMatch = safeFilters.logistics_company_id.some((id) => String(id) === orderLogisticsId);
140
+ const hasMatch = safeFilters.logistics_company_id.some(id => String(id) === orderLogisticsId);
117
141
  if (!hasMatch) {
118
142
  return false;
119
143
  }
120
144
  }
121
- if (safeFilters.zip !== void 0 && safeFilters.zip !== null && safeFilters.zip !== "") {
145
+
146
+ // zip - 邮编(模糊匹配)
147
+ if (safeFilters.zip !== undefined && safeFilters.zip !== null && safeFilters.zip !== '') {
122
148
  if (!order.zip || !order.zip.toLowerCase().includes(safeFilters.zip.toLowerCase())) {
123
149
  return false;
124
150
  }
125
151
  }
152
+
153
+ // business_code - 业务类型(精确匹配)
126
154
  if (safeFilters.business_code) {
127
155
  if (!order.business_code || order.business_code !== safeFilters.business_code) {
128
156
  return false;
129
157
  }
130
158
  }
159
+
160
+ // start_time / end_time - 创建时间范围
131
161
  if (safeFilters.start_time || safeFilters.end_time) {
132
- const orderTime = order.created_at ? typeof order.created_at === "number" ? order.created_at : new Date(String(order.created_at)).getTime() : 0;
162
+ const orderTime = order.created_at ? typeof order.created_at === 'number' ? order.created_at : new Date(String(order.created_at)).getTime() : 0;
133
163
  if (safeFilters.start_time) {
134
164
  const startTs = new Date(safeFilters.start_time).getTime();
135
- if (orderTime < startTs)
136
- return false;
165
+ if (orderTime < startTs) return false;
137
166
  }
138
167
  if (safeFilters.end_time) {
139
- const endTs = new Date(safeFilters.end_time).getTime() + 864e5 - 1;
140
- if (orderTime > endTs)
141
- return false;
168
+ // end_time 为当天结束(23:59:59.999)
169
+ const endTs = new Date(safeFilters.end_time).getTime() + 86400000 - 1;
170
+ if (orderTime > endTs) return false;
142
171
  }
143
172
  }
144
173
  return true;
145
174
  });
175
+
176
+ // 2. 排序
146
177
  if (safeFilters.order_by) {
147
178
  const sortField = safeFilters.order_by;
148
- const sortOrder = safeFilters.sort || "desc";
179
+ const sortOrder = safeFilters.sort || 'desc';
149
180
  filteredList.sort((a, b) => {
150
181
  let aVal;
151
182
  let bVal;
152
183
  switch (sortField) {
153
- case "created_at":
154
- aVal = a.created_at ? typeof a.created_at === "number" ? a.created_at : new Date(String(a.created_at)).getTime() : 0;
155
- bVal = b.created_at ? typeof b.created_at === "number" ? b.created_at : new Date(String(b.created_at)).getTime() : 0;
184
+ case 'created_at':
185
+ aVal = a.created_at ? typeof a.created_at === 'number' ? a.created_at : new Date(String(a.created_at)).getTime() : 0;
186
+ bVal = b.created_at ? typeof b.created_at === 'number' ? b.created_at : new Date(String(b.created_at)).getTime() : 0;
156
187
  break;
157
- case "updated_at":
158
- aVal = a.updated_at ? typeof a.updated_at === "number" ? a.updated_at : new Date(String(a.updated_at)).getTime() : 0;
159
- bVal = b.updated_at ? typeof b.updated_at === "number" ? b.updated_at : new Date(String(b.updated_at)).getTime() : 0;
188
+ case 'updated_at':
189
+ aVal = a.updated_at ? typeof a.updated_at === 'number' ? a.updated_at : new Date(String(a.updated_at)).getTime() : 0;
190
+ bVal = b.updated_at ? typeof b.updated_at === 'number' ? b.updated_at : new Date(String(b.updated_at)).getTime() : 0;
160
191
  break;
161
- case "total_amount":
192
+ case 'total_amount':
162
193
  aVal = parseFloat(String(a.total_amount || 0));
163
194
  bVal = parseFloat(String(b.total_amount || 0));
164
195
  break;
165
- case "customer_name":
166
- aVal = (a.customer_name || "").toLowerCase();
167
- bVal = (b.customer_name || "").toLowerCase();
196
+ case 'customer_name':
197
+ aVal = (a.customer_name || '').toLowerCase();
198
+ bVal = (b.customer_name || '').toLowerCase();
168
199
  break;
169
- case "amount_gap":
200
+ case 'amount_gap':
170
201
  return 0;
171
202
  default:
172
203
  return 0;
173
204
  }
174
205
  if (aVal < bVal) {
175
- return sortOrder === "asc" ? -1 : 1;
206
+ return sortOrder === 'asc' ? -1 : 1;
176
207
  }
177
208
  if (aVal > bVal) {
178
- return sortOrder === "asc" ? 1 : -1;
209
+ return sortOrder === 'asc' ? 1 : -1;
179
210
  }
180
211
  return 0;
181
212
  });
182
213
  }
214
+
215
+ // 3. 分页(skip 为页码,从 1 开始)
183
216
  const totalCount = filteredList.length;
184
217
  const startIndex = (page - 1) * size;
185
218
  const endIndex = startIndex + size;
@@ -190,8 +223,4 @@ function filterOrders(orders, filters) {
190
223
  size,
191
224
  skip: page
192
225
  };
193
- }
194
- // Annotate the CommonJS export names for ESM import in node:
195
- 0 && (module.exports = {
196
- filterOrders
197
- });
226
+ }