@pisell/pisellos 2.3.74 → 2.3.75

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 (276) hide show
  1. package/dist/core/index.js +6 -10
  2. package/dist/model/strategy/adapter/promotion/index.js +9 -0
  3. package/dist/model/strategy/adapter/walletPass/example.js +3 -26
  4. package/dist/model/strategy/strategy-example.js +5 -19
  5. package/dist/modules/Cart/index.js +0 -3
  6. package/dist/modules/Cart/utils/cartProduct.js +0 -1
  7. package/dist/modules/Date/index.js +1 -5
  8. package/dist/modules/Discount/index.js +2 -4
  9. package/dist/modules/OpenData/index.js +0 -2
  10. package/dist/modules/Order/index.js +36 -64
  11. package/dist/modules/Payment/index.js +97 -162
  12. package/dist/modules/Rules/index.js +1 -4
  13. package/dist/modules/Schedule/index.js +0 -1
  14. package/dist/modules/Schedule/utils.js +0 -1
  15. package/dist/modules/Step/index.js +0 -1
  16. package/dist/plugins/request.js +1 -4
  17. package/dist/plugins/window.js +2 -6
  18. package/dist/server/index.js +97 -129
  19. package/dist/server/modules/menu/index.js +32 -41
  20. package/dist/server/modules/order/index.js +2 -4
  21. package/dist/server/modules/products/index.js +24 -42
  22. package/dist/server/modules/quotation/index.js +29 -38
  23. package/dist/server/modules/resource/index.js +3 -4
  24. package/dist/server/modules/schedule/index.js +27 -35
  25. package/dist/server/utils/product.js +0 -1
  26. package/dist/solution/BaseSales/index.js +38 -41
  27. package/dist/solution/BookingByStep/index.js +7 -59
  28. package/dist/solution/BookingByStep/utils/capacity.js +1 -11
  29. package/dist/solution/BookingByStep/utils/resources.js +1 -3
  30. package/dist/solution/BookingByStep/utils/timeslots.js +2 -43
  31. package/dist/solution/BookingTicket/index.js +0 -2
  32. package/dist/solution/BookingTicket/utils/scan/cloudSearch.js +6 -7
  33. package/dist/solution/BookingTicket/utils/scan/handleScan.js +25 -31
  34. package/dist/solution/BookingTicket/utils/scan/index.js +6 -10
  35. package/dist/solution/BuyTickets/index.js +9 -12
  36. package/dist/solution/Checkout/index.js +177 -252
  37. package/dist/solution/Checkout/utils/index.js +4 -16
  38. package/dist/solution/RegisterAndLogin/index.js +30 -76
  39. package/dist/solution/ScanOrder/index.js +50 -60
  40. package/dist/solution/ShopDiscount/index.js +2 -7
  41. package/dist/solution/VenueBooking/index.js +45 -55
  42. package/dist/utils/task.js +15 -18
  43. package/dist/utils/watch.js +0 -1
  44. package/lib/apis/picoding.js +2 -0
  45. package/lib/core/index.js +134 -134
  46. package/lib/effects/index.js +46 -57
  47. package/lib/index.js +82 -49
  48. package/lib/model/index.js +14 -21
  49. package/lib/model/strategy/adapter/dataVariant/adapter.js +38 -50
  50. package/lib/model/strategy/adapter/dataVariant/evaluator.js +162 -236
  51. package/lib/model/strategy/adapter/dataVariant/examples.js +229 -237
  52. package/lib/model/strategy/adapter/dataVariant/index.js +39 -34
  53. package/lib/model/strategy/adapter/dataVariant/type.js +57 -28
  54. package/lib/model/strategy/adapter/index.js +100 -64
  55. package/lib/model/strategy/adapter/itemRule/adapter.js +156 -144
  56. package/lib/model/strategy/adapter/itemRule/evaluator.js +36 -48
  57. package/lib/model/strategy/adapter/itemRule/examples.js +295 -225
  58. package/lib/model/strategy/adapter/itemRule/index.js +83 -57
  59. package/lib/model/strategy/adapter/itemRule/type.js +97 -36
  60. package/lib/model/strategy/adapter/promotion/adapter.js +91 -69
  61. package/lib/model/strategy/adapter/promotion/evaluator.js +444 -310
  62. package/lib/model/strategy/adapter/promotion/examples.js +222 -234
  63. package/lib/model/strategy/adapter/promotion/index.js +1 -0
  64. package/lib/model/strategy/adapter/promotion/type.js +243 -36
  65. package/lib/model/strategy/adapter/type.js +4 -16
  66. package/lib/model/strategy/adapter/walletPass/evaluator.js +180 -150
  67. package/lib/model/strategy/adapter/walletPass/example.js +217 -190
  68. package/lib/model/strategy/adapter/walletPass/index.js +75 -51
  69. package/lib/model/strategy/adapter/walletPass/locales.js +36 -58
  70. package/lib/model/strategy/adapter/walletPass/type.js +4 -16
  71. package/lib/model/strategy/adapter/walletPass/utils.js +588 -378
  72. package/lib/model/strategy/engine.js +270 -168
  73. package/lib/model/strategy/index.js +49 -34
  74. package/lib/model/strategy/strategy-example.js +243 -239
  75. package/lib/model/strategy/type.js +100 -40
  76. package/lib/modules/Account/index.js +39 -53
  77. package/lib/modules/Account/types.js +20 -33
  78. package/lib/modules/AccountList/index.js +116 -154
  79. package/lib/modules/AccountList/types.js +30 -31
  80. package/lib/modules/AccountList/utils.js +18 -30
  81. package/lib/modules/BaseModule.js +23 -42
  82. package/lib/modules/BookingContext/index.js +158 -136
  83. package/lib/modules/BookingContext/types.js +46 -32
  84. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +138 -146
  85. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +78 -83
  86. package/lib/modules/BookingContext/utils/cacheItemToBookingInput.js +170 -150
  87. package/lib/modules/BookingContext/utils/flexible.js +38 -55
  88. package/lib/modules/BookingContext/utils/formatResourceList.js +19 -34
  89. package/lib/modules/BookingContext/utils/index.js +124 -41
  90. package/lib/modules/BookingContext/utils/noResource.js +58 -70
  91. package/lib/modules/BookingContext/utils/orderLineDisplay.js +14 -41
  92. package/lib/modules/BookingContext/utils/productExtend.js +202 -155
  93. package/lib/modules/BookingContext/utils/resourceErrors.js +53 -53
  94. package/lib/modules/BookingContext/utils/resourceSelection.js +19 -41
  95. package/lib/modules/BookingContext/utils/resources.js +209 -167
  96. package/lib/modules/BookingContext/utils/serviceTimes.js +115 -116
  97. package/lib/modules/BookingContext/utils/timeSlices.js +76 -86
  98. package/lib/modules/Cart/index.js +170 -124
  99. package/lib/modules/Cart/types.js +46 -51
  100. package/lib/modules/Cart/utils/cartAccount.js +40 -39
  101. package/lib/modules/Cart/utils/cartDate.js +56 -61
  102. package/lib/modules/Cart/utils/cartDiscount.js +28 -33
  103. package/lib/modules/Cart/utils/cartNote.js +27 -32
  104. package/lib/modules/Cart/utils/cartProduct.js +321 -251
  105. package/lib/modules/Cart/utils/cartRelationForms.js +29 -35
  106. package/lib/modules/Cart/utils/cartResource.js +70 -78
  107. package/lib/modules/Cart/utils/changePrice.js +22 -50
  108. package/lib/modules/Cart/utils/index.js +106 -48
  109. package/lib/modules/Customer/constants.js +13 -34
  110. package/lib/modules/Customer/index.js +235 -172
  111. package/lib/modules/Customer/types.js +38 -35
  112. package/lib/modules/Date/index.js +116 -115
  113. package/lib/modules/Date/types.js +16 -28
  114. package/lib/modules/Date/utils.js +174 -123
  115. package/lib/modules/Discount/index.js +122 -127
  116. package/lib/modules/Discount/types.js +9 -31
  117. package/lib/modules/Guests/index.js +30 -56
  118. package/lib/modules/Guests/types.js +23 -33
  119. package/lib/modules/Holder/index.js +209 -189
  120. package/lib/modules/Holder/types.js +4 -16
  121. package/lib/modules/Holder/utils.js +20 -49
  122. package/lib/modules/OpenData/index.js +70 -76
  123. package/lib/modules/OpenData/types.js +4 -16
  124. package/lib/modules/OpenData/utils.js +44 -78
  125. package/lib/modules/Order/index.js +1713 -2118
  126. package/lib/modules/Order/payment-utils.js +77 -120
  127. package/lib/modules/Order/types.js +88 -35
  128. package/lib/modules/Order/utils/bundleDiscountHydration.js +41 -74
  129. package/lib/modules/Order/utils/discountProductLineIdentity.js +142 -100
  130. package/lib/modules/Order/utils/manualProductDiscount.js +124 -123
  131. package/lib/modules/Order/utils/orderCollectionIdentity.js +184 -244
  132. package/lib/modules/Order/utils.js +814 -647
  133. package/lib/modules/Payment/cash.js +20 -33
  134. package/lib/modules/Payment/cashRecommendationAlgorithm.js +145 -76
  135. package/lib/modules/Payment/eftpos.js +16 -30
  136. package/lib/modules/Payment/index.js +532 -399
  137. package/lib/modules/Payment/mx51.js +1 -0
  138. package/lib/modules/Payment/types.js +230 -108
  139. package/lib/modules/Payment/utils.js +52 -51
  140. package/lib/modules/Payment/walletpass.js +485 -660
  141. package/lib/modules/Product/index.js +51 -46
  142. package/lib/modules/Product/types.js +4 -16
  143. package/lib/modules/Product/utils.js +32 -33
  144. package/lib/modules/ProductList/index.js +113 -123
  145. package/lib/modules/ProductList/types.js +9 -31
  146. package/lib/modules/Quotation/index.js +81 -118
  147. package/lib/modules/Quotation/types.js +4 -16
  148. package/lib/modules/Resource/index.js +27 -59
  149. package/lib/modules/Resource/types.js +22 -32
  150. package/lib/modules/Resource/utils.js +30 -38
  151. package/lib/modules/ResourcePlanner/index.js +25 -23
  152. package/lib/modules/ResourcePlanner/localClock.js +54 -119
  153. package/lib/modules/ResourcePlanner/planner.js +589 -770
  154. package/lib/modules/ResourcePlanner/types.js +10 -29
  155. package/lib/modules/Rules/index.js +1218 -959
  156. package/lib/modules/Rules/types.js +17 -40
  157. package/lib/modules/SalesSummary/index.js +85 -90
  158. package/lib/modules/SalesSummary/types.js +4 -16
  159. package/lib/modules/SalesSummary/utils.js +355 -430
  160. package/lib/modules/ScanOrderLogger/index.js +59 -79
  161. package/lib/modules/ScanOrderLogger/providers/feishu.js +54 -78
  162. package/lib/modules/ScanOrderLogger/providers/grafana.js +13 -36
  163. package/lib/modules/ScanOrderLogger/types.js +4 -16
  164. package/lib/modules/Schedule/getDateIsInSchedule.js +334 -163
  165. package/lib/modules/Schedule/index.js +100 -114
  166. package/lib/modules/Schedule/type.js +4 -16
  167. package/lib/modules/Schedule/types.js +4 -16
  168. package/lib/modules/Schedule/utils.js +433 -291
  169. package/lib/modules/Step/index.js +40 -52
  170. package/lib/modules/Step/tyeps.js +4 -16
  171. package/lib/modules/Summary/index.js +66 -71
  172. package/lib/modules/Summary/types.js +4 -16
  173. package/lib/modules/Summary/utils.js +773 -418
  174. package/lib/modules/SurchargeList/index.js +46 -60
  175. package/lib/modules/SurchargeList/types.js +4 -16
  176. package/lib/modules/index.js +245 -63
  177. package/lib/plugins/app.js +4 -16
  178. package/lib/plugins/index.js +36 -25
  179. package/lib/plugins/request.js +137 -126
  180. package/lib/plugins/shopStore.js +4 -16
  181. package/lib/plugins/user.js +4 -16
  182. package/lib/plugins/window.js +171 -179
  183. package/lib/server/index.js +3050 -2665
  184. package/lib/server/modules/floor-plan/index.js +118 -134
  185. package/lib/server/modules/floor-plan/types.js +15 -30
  186. package/lib/server/modules/index.js +106 -68
  187. package/lib/server/modules/menu/index.js +142 -122
  188. package/lib/server/modules/menu/types.js +18 -31
  189. package/lib/server/modules/order/index.js +784 -1002
  190. package/lib/server/modules/order/types.js +122 -33
  191. package/lib/server/modules/order/utils/filterBookings.js +219 -194
  192. package/lib/server/modules/order/utils/filterOrders.js +118 -92
  193. package/lib/server/modules/payment/index.js +59 -83
  194. package/lib/server/modules/payment/types.js +4 -16
  195. package/lib/server/modules/products/index.js +583 -471
  196. package/lib/server/modules/products/types.js +44 -34
  197. package/lib/server/modules/quotation/index.js +137 -172
  198. package/lib/server/modules/quotation/types.js +21 -31
  199. package/lib/server/modules/resource/index.js +220 -186
  200. package/lib/server/modules/resource/types.js +42 -33
  201. package/lib/server/modules/schedule/index.js +135 -123
  202. package/lib/server/modules/schedule/types.js +14 -21
  203. package/lib/server/modules/schedule/utils.js +334 -163
  204. package/lib/server/types.js +4 -16
  205. package/lib/server/utils/index.js +25 -23
  206. package/lib/server/utils/product.js +196 -139
  207. package/lib/server/utils/schedule.js +34 -41
  208. package/lib/server/utils/small-ticket.js +479 -456
  209. package/lib/server/utils/time.js +40 -49
  210. package/lib/solution/BaseSales/index.js +1186 -1410
  211. package/lib/solution/BaseSales/types.js +42 -38
  212. package/lib/solution/BaseSales/utils/cartPromotion.js +642 -498
  213. package/lib/solution/BaseSales/utils/parseSalesResponse.js +85 -105
  214. package/lib/solution/BaseSales/utils/quotationPrice.js +56 -114
  215. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +108 -145
  216. package/lib/solution/BaseSales/utils.js +158 -143
  217. package/lib/solution/BookingByStep/index.js +1527 -1340
  218. package/lib/solution/BookingByStep/types.js +40 -99
  219. package/lib/solution/BookingByStep/utils/capacity.js +192 -160
  220. package/lib/solution/BookingByStep/utils/products.js +42 -52
  221. package/lib/solution/BookingByStep/utils/resources.js +527 -330
  222. package/lib/solution/BookingByStep/utils/stock.js +65 -44
  223. package/lib/solution/BookingByStep/utils/timeslots.js +129 -131
  224. package/lib/solution/BookingTicket/index.js +607 -522
  225. package/lib/solution/BookingTicket/types.js +99 -77
  226. package/lib/solution/BookingTicket/utils/addProductDecision.js +226 -189
  227. package/lib/solution/BookingTicket/utils/addTimeAvailability.js +58 -89
  228. package/lib/solution/BookingTicket/utils/bookingStatus.js +107 -78
  229. package/lib/solution/BookingTicket/utils/cartView.js +114 -99
  230. package/lib/solution/BookingTicket/utils/exampleData.js +185 -0
  231. package/lib/solution/BookingTicket/utils/orderCustomer.js +18 -41
  232. package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.js +219 -86
  233. package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +168 -116
  234. package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +79 -91
  235. package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.js +54 -41
  236. package/lib/solution/BookingTicket/utils/scan/handleScan.js +84 -81
  237. package/lib/solution/BookingTicket/utils/scan/index.js +98 -104
  238. package/lib/solution/BookingTicket/utils/scan/scanCache.js +90 -43
  239. package/lib/solution/BookingTicket/utils/scan/scanProductValues.js +52 -64
  240. package/lib/solution/BookingTicket/utils/sessionCatalogStale.js +56 -58
  241. package/lib/solution/BookingTicket/utils/weighingProductSku.js +34 -48
  242. package/lib/solution/BuyTickets/index.js +67 -70
  243. package/lib/solution/BuyTickets/types.js +22 -38
  244. package/lib/solution/Checkout/index.js +1451 -1158
  245. package/lib/solution/Checkout/types.js +91 -61
  246. package/lib/solution/Checkout/utils/index.js +228 -156
  247. package/lib/solution/PlaceOrder/index.js +55 -0
  248. package/lib/solution/RegisterAndLogin/config.js +493 -460
  249. package/lib/solution/RegisterAndLogin/index.js +633 -630
  250. package/lib/solution/RegisterAndLogin/types.js +189 -76
  251. package/lib/solution/RegisterAndLogin/utils.js +183 -125
  252. package/lib/solution/Sales/index.js +328 -324
  253. package/lib/solution/Sales/types.js +27 -33
  254. package/lib/solution/ScanOrder/index.js +832 -864
  255. package/lib/solution/ScanOrder/types.js +33 -34
  256. package/lib/solution/ScanOrder/utils.js +409 -374
  257. package/lib/solution/ShopDiscount/index.js +226 -232
  258. package/lib/solution/ShopDiscount/types.js +15 -37
  259. package/lib/solution/ShopDiscount/utils.js +300 -172
  260. package/lib/solution/UnifiedBookingSales/index.js +1035 -1201
  261. package/lib/solution/UnifiedBookingSales/remoteOccupancyCache.js +99 -159
  262. package/lib/solution/UnifiedBookingSales/types.js +10 -32
  263. package/lib/solution/VenueBooking/index.js +811 -879
  264. package/lib/solution/VenueBooking/types.js +19 -39
  265. package/lib/solution/VenueBooking/utils/dateSummary.js +27 -56
  266. package/lib/solution/VenueBooking/utils/resource.js +31 -54
  267. package/lib/solution/VenueBooking/utils/slotMerge.js +94 -107
  268. package/lib/solution/VenueBooking/utils/timeSlot.js +132 -132
  269. package/lib/solution/VenueBooking/utils.js +130 -67
  270. package/lib/solution/index.js +124 -41
  271. package/lib/store/createStore.js +32 -29
  272. package/lib/types/index.js +4 -16
  273. package/lib/utils/payment-number.js +26 -46
  274. package/lib/utils/task.js +36 -36
  275. package/lib/utils/watch.js +81 -47
  276. package/package.json +2 -1
@@ -1,46 +1,34 @@
1
- var __create = Object.create;
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf;
6
- var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __export = (target, all) => {
8
- for (var name in all)
9
- __defProp(target, name, { get: all[name], enumerable: true });
10
- };
11
- var __copyProps = (to, from, except, desc) => {
12
- if (from && typeof from === "object" || typeof from === "function") {
13
- for (let key of __getOwnPropNames(from))
14
- if (!__hasOwnProp.call(to, key) && key !== except)
15
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
- }
17
- return to;
18
- };
19
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
- // If the importer is in node compatibility mode or this is not an ESM
21
- // file that has been converted to a CommonJS file using a Babel-
22
- // compatible transform (i.e. "__esModule" has not been set), then set
23
- // "default" to the CommonJS "module.exports" for node compatibility.
24
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
- mod
26
- ));
27
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
1
+ "use strict";
28
2
 
29
- // src/server/modules/order/utils/filterOrders.ts
30
- var filterOrders_exports = {};
31
- __export(filterOrders_exports, {
32
- filterOrders: () => filterOrders
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
33
5
  });
34
- module.exports = __toCommonJS(filterOrders_exports);
35
- var import_dayjs = __toESM(require("dayjs"));
6
+ exports.filterOrders = filterOrders;
7
+ var _dayjs = _interopRequireDefault(require("dayjs"));
8
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
+ /** 从订单 payments 提取支付方式 code,与 UI 筛选选项及 filterBookings 一致 */
36
10
  function getOrderPaymentCodes(order) {
37
11
  const payments = order.payments;
38
12
  if (!Array.isArray(payments) || payments.length === 0) {
39
13
  return [];
40
14
  }
41
- return payments.map((item) => item == null ? void 0 : item.code).filter((code) => typeof code === "string" && code.length > 0);
15
+ return payments.map(item => item?.code).filter(code => typeof code === 'string' && code.length > 0);
42
16
  }
17
+
18
+ /**
19
+ * 订单过滤函数
20
+ * @param orders 原始订单列表
21
+ * @param filters 过滤条件
22
+ * @returns 过滤 + 排序 + 分页后的结果
23
+ *
24
+ * @优化口子 性能优化预留:
25
+ * - 可在此函数入口加缓存(按 filters 签名缓存结果)
26
+ * - 可对枚举字段建倒排索引(status/payment_status/shipping_status/customer_id)
27
+ * - 可对文本字段加前缀树或分词索引
28
+ * - 可做增量过滤而非全量遍历
29
+ */
43
30
  function filterOrders(orders, filters) {
31
+ // Bug 1 修复:防护 filters 为 null/undefined
44
32
  const safeFilters = filters || {};
45
33
  if (!orders || !Array.isArray(orders)) {
46
34
  return {
@@ -51,31 +39,37 @@ function filterOrders(orders, filters) {
51
39
  rejected: []
52
40
  };
53
41
  }
42
+
43
+ // 默认分页参数
54
44
  const size = safeFilters.num || 20;
55
45
  const page = safeFilters.skip || 1;
56
46
  const rejected = [];
57
- let filteredList = orders.filter((order) => {
47
+
48
+ // 1. 过滤
49
+ let filteredList = orders.filter(order => {
58
50
  if (safeFilters.keyword) {
59
51
  if (!JSON.stringify(order).toLowerCase().includes(safeFilters.keyword.toLowerCase())) {
60
52
  rejected.push({
61
53
  order_id: order.order_id,
62
54
  order_number: order.order_number,
63
55
  reason: {
64
- field: "keyword",
65
- actual: "",
56
+ field: 'keyword',
57
+ actual: '',
66
58
  expected: safeFilters.keyword
67
59
  }
68
60
  });
69
61
  return false;
70
62
  }
71
63
  }
64
+
65
+ // status - 订单状态
72
66
  if (safeFilters.status && safeFilters.status.length > 0) {
73
67
  if (!order.status || !safeFilters.status.includes(order.status)) {
74
68
  rejected.push({
75
69
  order_id: order.order_id,
76
70
  order_number: order.order_number,
77
71
  reason: {
78
- field: "status",
72
+ field: 'status',
79
73
  actual: order.status,
80
74
  expected: safeFilters.status
81
75
  }
@@ -83,13 +77,15 @@ function filterOrders(orders, filters) {
83
77
  return false;
84
78
  }
85
79
  }
80
+
81
+ // payment_status - 支付状态
86
82
  if (safeFilters.payment_status && safeFilters.payment_status.length > 0) {
87
83
  if (!order.payment_status || !safeFilters.payment_status.includes(order.payment_status)) {
88
84
  rejected.push({
89
85
  order_id: order.order_id,
90
86
  order_number: order.order_number,
91
87
  reason: {
92
- field: "payment_status",
88
+ field: 'payment_status',
93
89
  actual: order.payment_status,
94
90
  expected: safeFilters.payment_status
95
91
  }
@@ -97,13 +93,15 @@ function filterOrders(orders, filters) {
97
93
  return false;
98
94
  }
99
95
  }
96
+
97
+ // shipping_status - 处理状态
100
98
  if (safeFilters.shipping_status && safeFilters.shipping_status.length > 0) {
101
99
  if (!order.shipping_status || !safeFilters.shipping_status.includes(order.shipping_status)) {
102
100
  rejected.push({
103
101
  order_id: order.order_id,
104
102
  order_number: order.order_number,
105
103
  reason: {
106
- field: "shipping_status",
104
+ field: 'shipping_status',
107
105
  actual: order.shipping_status,
108
106
  expected: safeFilters.shipping_status
109
107
  }
@@ -111,13 +109,15 @@ function filterOrders(orders, filters) {
111
109
  return false;
112
110
  }
113
111
  }
114
- if (safeFilters.customer_id !== void 0 && safeFilters.customer_id !== null) {
112
+
113
+ // customer_id - 客户ID(精确匹配)
114
+ if (safeFilters.customer_id !== undefined && safeFilters.customer_id !== null) {
115
115
  if (String(order.customer_id) !== String(safeFilters.customer_id)) {
116
116
  rejected.push({
117
117
  order_id: order.order_id,
118
118
  order_number: order.order_number,
119
119
  reason: {
120
- field: "customer_id",
120
+ field: 'customer_id',
121
121
  actual: order.customer_id,
122
122
  expected: safeFilters.customer_id
123
123
  }
@@ -125,13 +125,15 @@ function filterOrders(orders, filters) {
125
125
  return false;
126
126
  }
127
127
  }
128
+
129
+ // order_sales_channel - 销售渠道
128
130
  if (safeFilters.order_sales_channel && safeFilters.order_sales_channel.length > 0) {
129
131
  if (!order.order_sales_channel || !safeFilters.order_sales_channel.includes(order.order_sales_channel)) {
130
132
  rejected.push({
131
133
  order_id: order.order_id,
132
134
  order_number: order.order_number,
133
135
  reason: {
134
- field: "order_sales_channel",
136
+ field: 'order_sales_channel',
135
137
  actual: order.order_sales_channel,
136
138
  expected: safeFilters.order_sales_channel
137
139
  }
@@ -139,6 +141,8 @@ function filterOrders(orders, filters) {
139
141
  return false;
140
142
  }
141
143
  }
144
+
145
+ // payment_methods - 支付方式(按 payments[].code 匹配,不再使用 order.payment_methods)
142
146
  if (safeFilters.payment_methods && safeFilters.payment_methods.length > 0) {
143
147
  const orderPaymentCodes = getOrderPaymentCodes(order);
144
148
  if (orderPaymentCodes.length === 0) {
@@ -146,20 +150,20 @@ function filterOrders(orders, filters) {
146
150
  order_id: order.order_id,
147
151
  order_number: order.order_number,
148
152
  reason: {
149
- field: "payment_methods",
153
+ field: 'payment_methods',
150
154
  actual: order.payments,
151
155
  expected: safeFilters.payment_methods
152
156
  }
153
157
  });
154
158
  return false;
155
159
  }
156
- const hasMatch = orderPaymentCodes.some((code) => safeFilters.payment_methods.includes(code));
160
+ const hasMatch = orderPaymentCodes.some(code => safeFilters.payment_methods.includes(code));
157
161
  if (!hasMatch) {
158
162
  rejected.push({
159
163
  order_id: order.order_id,
160
164
  order_number: order.order_number,
161
165
  reason: {
162
- field: "payment_methods",
166
+ field: 'payment_methods',
163
167
  actual: orderPaymentCodes,
164
168
  expected: safeFilters.payment_methods
165
169
  }
@@ -167,26 +171,28 @@ function filterOrders(orders, filters) {
167
171
  return false;
168
172
  }
169
173
  }
170
- if (safeFilters.min_total_amount !== void 0 || safeFilters.max_total_amount !== void 0) {
174
+
175
+ // min_total_amount / max_total_amount - 订单金额范围
176
+ if (safeFilters.min_total_amount !== undefined || safeFilters.max_total_amount !== undefined) {
171
177
  const orderAmount = parseFloat(String(order.total_amount || 0));
172
- if (safeFilters.min_total_amount !== void 0 && orderAmount < safeFilters.min_total_amount) {
178
+ if (safeFilters.min_total_amount !== undefined && orderAmount < safeFilters.min_total_amount) {
173
179
  rejected.push({
174
180
  order_id: order.order_id,
175
181
  order_number: order.order_number,
176
182
  reason: {
177
- field: "min_total_amount",
183
+ field: 'min_total_amount',
178
184
  actual: order.total_amount,
179
185
  expected: safeFilters.min_total_amount
180
186
  }
181
187
  });
182
188
  return false;
183
189
  }
184
- if (safeFilters.max_total_amount !== void 0 && orderAmount > safeFilters.max_total_amount) {
190
+ if (safeFilters.max_total_amount !== undefined && orderAmount > safeFilters.max_total_amount) {
185
191
  rejected.push({
186
192
  order_id: order.order_id,
187
193
  order_number: order.order_number,
188
194
  reason: {
189
- field: "max_total_amount",
195
+ field: 'max_total_amount',
190
196
  actual: order.total_amount,
191
197
  expected: safeFilters.max_total_amount
192
198
  }
@@ -194,13 +200,15 @@ function filterOrders(orders, filters) {
194
200
  return false;
195
201
  }
196
202
  }
203
+
204
+ // tag_ids - 标签(统一 String 比较,兼容 number/string)
197
205
  if (safeFilters.tag_ids && safeFilters.tag_ids.length > 0) {
198
206
  if (!order.tag_ids || !Array.isArray(order.tag_ids) || order.tag_ids.length === 0) {
199
207
  rejected.push({
200
208
  order_id: order.order_id,
201
209
  order_number: order.order_number,
202
210
  reason: {
203
- field: "tag_ids",
211
+ field: 'tag_ids',
204
212
  actual: order.tag_ids,
205
213
  expected: safeFilters.tag_ids
206
214
  }
@@ -208,13 +216,13 @@ function filterOrders(orders, filters) {
208
216
  return false;
209
217
  }
210
218
  const filterTagSet = new Set(safeFilters.tag_ids.map(String));
211
- const hasMatch = order.tag_ids.some((tag) => filterTagSet.has(String(tag)));
219
+ const hasMatch = order.tag_ids.some(tag => filterTagSet.has(String(tag)));
212
220
  if (!hasMatch) {
213
221
  rejected.push({
214
222
  order_id: order.order_id,
215
223
  order_number: order.order_number,
216
224
  reason: {
217
- field: "tag_ids",
225
+ field: 'tag_ids',
218
226
  actual: order.tag_ids,
219
227
  expected: safeFilters.tag_ids
220
228
  }
@@ -222,13 +230,15 @@ function filterOrders(orders, filters) {
222
230
  return false;
223
231
  }
224
232
  }
233
+
234
+ // shipping_type - 配送方式
225
235
  if (safeFilters.shipping_type && safeFilters.shipping_type.length > 0) {
226
236
  if (!order.shipping_type || !safeFilters.shipping_type.includes(order.shipping_type)) {
227
237
  rejected.push({
228
238
  order_id: order.order_id,
229
239
  order_number: order.order_number,
230
240
  reason: {
231
- field: "shipping_type",
241
+ field: 'shipping_type',
232
242
  actual: order.shipping_type,
233
243
  expected: safeFilters.shipping_type
234
244
  }
@@ -236,13 +246,15 @@ function filterOrders(orders, filters) {
236
246
  return false;
237
247
  }
238
248
  }
239
- if (safeFilters.delivery_zone_name !== void 0 && safeFilters.delivery_zone_name !== null && safeFilters.delivery_zone_name !== "") {
249
+
250
+ // delivery_zone_name - 配送区域(模糊匹配)
251
+ if (safeFilters.delivery_zone_name !== undefined && safeFilters.delivery_zone_name !== null && safeFilters.delivery_zone_name !== '') {
240
252
  if (!order.delivery_zone_name || !order.delivery_zone_name.toLowerCase().includes(safeFilters.delivery_zone_name.toLowerCase())) {
241
253
  rejected.push({
242
254
  order_id: order.order_id,
243
255
  order_number: order.order_number,
244
256
  reason: {
245
- field: "delivery_zone_name",
257
+ field: 'delivery_zone_name',
246
258
  actual: order.delivery_zone_name,
247
259
  expected: safeFilters.delivery_zone_name
248
260
  }
@@ -250,13 +262,15 @@ function filterOrders(orders, filters) {
250
262
  return false;
251
263
  }
252
264
  }
253
- if (safeFilters.location_id !== void 0 && safeFilters.location_id !== null) {
265
+
266
+ // location_id - 取货地点(精确匹配)
267
+ if (safeFilters.location_id !== undefined && safeFilters.location_id !== null) {
254
268
  if (String(order.location_id) !== String(safeFilters.location_id)) {
255
269
  rejected.push({
256
270
  order_id: order.order_id,
257
271
  order_number: order.order_number,
258
272
  reason: {
259
- field: "location_id",
273
+ field: 'location_id',
260
274
  actual: order.location_id,
261
275
  expected: safeFilters.location_id
262
276
  }
@@ -264,13 +278,15 @@ function filterOrders(orders, filters) {
264
278
  return false;
265
279
  }
266
280
  }
267
- if (safeFilters.shipping_order_number !== void 0 && safeFilters.shipping_order_number !== null && safeFilters.shipping_order_number !== "") {
281
+
282
+ // shipping_order_number - 物流单号(模糊匹配)
283
+ if (safeFilters.shipping_order_number !== undefined && safeFilters.shipping_order_number !== null && safeFilters.shipping_order_number !== '') {
268
284
  if (!order.shipping_order_number || !order.shipping_order_number.toLowerCase().includes(safeFilters.shipping_order_number.toLowerCase())) {
269
285
  rejected.push({
270
286
  order_id: order.order_id,
271
287
  order_number: order.order_number,
272
288
  reason: {
273
- field: "shipping_order_number",
289
+ field: 'shipping_order_number',
274
290
  actual: order.shipping_order_number,
275
291
  expected: safeFilters.shipping_order_number
276
292
  }
@@ -278,13 +294,15 @@ function filterOrders(orders, filters) {
278
294
  return false;
279
295
  }
280
296
  }
297
+
298
+ // logistics_company_id - 物流公司
281
299
  if (safeFilters.logistics_company_id && safeFilters.logistics_company_id.length > 0) {
282
300
  if (!order.logistics_company_id) {
283
301
  rejected.push({
284
302
  order_id: order.order_id,
285
303
  order_number: order.order_number,
286
304
  reason: {
287
- field: "logistics_company_id",
305
+ field: 'logistics_company_id',
288
306
  actual: order.logistics_company_id,
289
307
  expected: safeFilters.logistics_company_id
290
308
  }
@@ -292,13 +310,13 @@ function filterOrders(orders, filters) {
292
310
  return false;
293
311
  }
294
312
  const orderLogisticsId = String(order.logistics_company_id);
295
- const hasMatch = safeFilters.logistics_company_id.some((id) => String(id) === orderLogisticsId);
313
+ const hasMatch = safeFilters.logistics_company_id.some(id => String(id) === orderLogisticsId);
296
314
  if (!hasMatch) {
297
315
  rejected.push({
298
316
  order_id: order.order_id,
299
317
  order_number: order.order_number,
300
318
  reason: {
301
- field: "logistics_company_id",
319
+ field: 'logistics_company_id',
302
320
  actual: order.logistics_company_id,
303
321
  expected: safeFilters.logistics_company_id
304
322
  }
@@ -306,13 +324,15 @@ function filterOrders(orders, filters) {
306
324
  return false;
307
325
  }
308
326
  }
309
- if (safeFilters.zip !== void 0 && safeFilters.zip !== null && safeFilters.zip !== "") {
327
+
328
+ // zip - 邮编(模糊匹配)
329
+ if (safeFilters.zip !== undefined && safeFilters.zip !== null && safeFilters.zip !== '') {
310
330
  if (!order.zip || !order.zip.toLowerCase().includes(safeFilters.zip.toLowerCase())) {
311
331
  rejected.push({
312
332
  order_id: order.order_id,
313
333
  order_number: order.order_number,
314
334
  reason: {
315
- field: "zip",
335
+ field: 'zip',
316
336
  actual: order.zip,
317
337
  expected: safeFilters.zip
318
338
  }
@@ -320,13 +340,15 @@ function filterOrders(orders, filters) {
320
340
  return false;
321
341
  }
322
342
  }
343
+
344
+ // business_code - 业务类型(精确匹配)
323
345
  if (safeFilters.business_code) {
324
346
  if (!order.business_code || order.business_code !== safeFilters.business_code) {
325
347
  rejected.push({
326
348
  order_id: order.order_id,
327
349
  order_number: order.order_number,
328
350
  reason: {
329
- field: "business_code",
351
+ field: 'business_code',
330
352
  actual: order.business_code,
331
353
  expected: safeFilters.business_code
332
354
  }
@@ -334,17 +356,21 @@ function filterOrders(orders, filters) {
334
356
  return false;
335
357
  }
336
358
  }
359
+
360
+ // start_time / end_time - 创建时间范围
337
361
  if (safeFilters.start_time || safeFilters.end_time) {
338
- const isCreatedIsUndefined = order.created_at === void 0;
339
- const orderTime = order.created_at ? typeof order.created_at === "number" ? order.created_at : (0, import_dayjs.default)(String(order.created_at)).valueOf() : 0;
362
+ const isCreatedIsUndefined = order.created_at === undefined;
363
+ // 统一用 dayjs 按本地时区解析,避免 new Date("YYYY-MM-DD") 被当作 UTC 0
364
+ // 与含时分的本地时间字符串比较时产生时区错位
365
+ const orderTime = order.created_at ? typeof order.created_at === 'number' ? order.created_at : (0, _dayjs.default)(String(order.created_at)).valueOf() : 0;
340
366
  if (safeFilters.start_time && !isCreatedIsUndefined) {
341
- const startTs = (0, import_dayjs.default)(safeFilters.start_time).startOf("day").valueOf();
367
+ const startTs = (0, _dayjs.default)(safeFilters.start_time).startOf('day').valueOf();
342
368
  if (orderTime < startTs) {
343
369
  rejected.push({
344
370
  order_id: order.order_id,
345
371
  order_number: order.order_number,
346
372
  reason: {
347
- field: "start_time",
373
+ field: 'start_time',
348
374
  actual: order.created_at,
349
375
  expected: safeFilters.start_time
350
376
  }
@@ -353,13 +379,13 @@ function filterOrders(orders, filters) {
353
379
  }
354
380
  }
355
381
  if (safeFilters.end_time && !isCreatedIsUndefined) {
356
- const endTs = (0, import_dayjs.default)(safeFilters.end_time).endOf("day").valueOf();
382
+ const endTs = (0, _dayjs.default)(safeFilters.end_time).endOf('day').valueOf();
357
383
  if (orderTime > endTs) {
358
384
  rejected.push({
359
385
  order_id: order.order_id,
360
386
  order_number: order.order_number,
361
387
  reason: {
362
- field: "end_time",
388
+ field: 'end_time',
363
389
  actual: order.created_at,
364
390
  expected: safeFilters.end_time
365
391
  }
@@ -370,43 +396,47 @@ function filterOrders(orders, filters) {
370
396
  }
371
397
  return true;
372
398
  });
399
+
400
+ // 2. 排序
373
401
  if (safeFilters.order_by) {
374
402
  const sortField = safeFilters.order_by;
375
- const sortOrder = safeFilters.sort || "desc";
403
+ const sortOrder = safeFilters.sort || 'desc';
376
404
  filteredList.sort((a, b) => {
377
405
  let aVal;
378
406
  let bVal;
379
407
  switch (sortField) {
380
- case "created_at":
381
- aVal = a.created_at ? typeof a.created_at === "number" ? a.created_at : new Date(String(a.created_at)).getTime() : 0;
382
- bVal = b.created_at ? typeof b.created_at === "number" ? b.created_at : new Date(String(b.created_at)).getTime() : 0;
408
+ case 'created_at':
409
+ aVal = a.created_at ? typeof a.created_at === 'number' ? a.created_at : new Date(String(a.created_at)).getTime() : 0;
410
+ bVal = b.created_at ? typeof b.created_at === 'number' ? b.created_at : new Date(String(b.created_at)).getTime() : 0;
383
411
  break;
384
- case "updated_at":
385
- aVal = a.updated_at ? typeof a.updated_at === "number" ? a.updated_at : new Date(String(a.updated_at)).getTime() : 0;
386
- bVal = b.updated_at ? typeof b.updated_at === "number" ? b.updated_at : new Date(String(b.updated_at)).getTime() : 0;
412
+ case 'updated_at':
413
+ aVal = a.updated_at ? typeof a.updated_at === 'number' ? a.updated_at : new Date(String(a.updated_at)).getTime() : 0;
414
+ bVal = b.updated_at ? typeof b.updated_at === 'number' ? b.updated_at : new Date(String(b.updated_at)).getTime() : 0;
387
415
  break;
388
- case "total_amount":
416
+ case 'total_amount':
389
417
  aVal = parseFloat(String(a.total_amount || 0));
390
418
  bVal = parseFloat(String(b.total_amount || 0));
391
419
  break;
392
- case "customer_name":
393
- aVal = (a.customer_name || "").toLowerCase();
394
- bVal = (b.customer_name || "").toLowerCase();
420
+ case 'customer_name':
421
+ aVal = (a.customer_name || '').toLowerCase();
422
+ bVal = (b.customer_name || '').toLowerCase();
395
423
  break;
396
- case "amount_gap":
424
+ case 'amount_gap':
397
425
  return 0;
398
426
  default:
399
427
  return 0;
400
428
  }
401
429
  if (aVal < bVal) {
402
- return sortOrder === "asc" ? -1 : 1;
430
+ return sortOrder === 'asc' ? -1 : 1;
403
431
  }
404
432
  if (aVal > bVal) {
405
- return sortOrder === "asc" ? 1 : -1;
433
+ return sortOrder === 'asc' ? 1 : -1;
406
434
  }
407
435
  return 0;
408
436
  });
409
437
  }
438
+
439
+ // 3. 分页(skip 为页码,从 1 开始)
410
440
  const totalCount = filteredList.length;
411
441
  const startIndex = (page - 1) * size;
412
442
  const endIndex = startIndex + size;
@@ -418,8 +448,4 @@ function filterOrders(orders, filters) {
418
448
  skip: page,
419
449
  rejected
420
450
  };
421
- }
422
- // Annotate the CommonJS export names for ESM import in node:
423
- 0 && (module.exports = {
424
- filterOrders
425
- });
451
+ }