@pisell/pisellos 2.2.283 → 2.2.284

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 (284) 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.d.ts +1 -1
  11. package/dist/modules/Order/index.js +64 -86
  12. package/dist/modules/Order/types.d.ts +1 -1
  13. package/dist/modules/Payment/index.js +97 -162
  14. package/dist/modules/Rules/index.js +1 -4
  15. package/dist/modules/Schedule/index.js +0 -1
  16. package/dist/modules/Schedule/utils.js +0 -1
  17. package/dist/modules/Step/index.js +0 -1
  18. package/dist/modules/Summary/utils.d.ts +1 -1
  19. package/dist/plugins/request.js +1 -4
  20. package/dist/plugins/window.js +2 -6
  21. package/dist/server/index.js +97 -129
  22. package/dist/server/modules/menu/index.js +32 -41
  23. package/dist/server/modules/order/index.js +2 -4
  24. package/dist/server/modules/products/index.js +24 -42
  25. package/dist/server/modules/quotation/index.js +29 -38
  26. package/dist/server/modules/resource/index.js +3 -4
  27. package/dist/server/modules/schedule/index.js +27 -35
  28. package/dist/server/utils/product.js +0 -1
  29. package/dist/solution/BaseSales/index.js +100 -72
  30. package/dist/solution/BookingByStep/index.d.ts +1 -1
  31. package/dist/solution/BookingByStep/index.js +7 -59
  32. package/dist/solution/BookingByStep/utils/capacity.js +1 -11
  33. package/dist/solution/BookingByStep/utils/resources.js +1 -3
  34. package/dist/solution/BookingByStep/utils/timeslots.js +2 -43
  35. package/dist/solution/BookingTicket/index.d.ts +1 -13
  36. package/dist/solution/BookingTicket/index.js +0 -2
  37. package/dist/solution/BookingTicket/utils/scan/cloudSearch.js +6 -7
  38. package/dist/solution/BookingTicket/utils/scan/handleScan.js +25 -31
  39. package/dist/solution/BookingTicket/utils/scan/index.js +6 -10
  40. package/dist/solution/BuyTickets/index.js +9 -12
  41. package/dist/solution/Checkout/index.js +177 -252
  42. package/dist/solution/Checkout/utils/index.js +4 -16
  43. package/dist/solution/RegisterAndLogin/index.js +30 -76
  44. package/dist/solution/ScanOrder/index.js +50 -60
  45. package/dist/solution/ShopDiscount/index.js +2 -7
  46. package/dist/solution/VenueBooking/index.js +45 -55
  47. package/dist/utils/task.js +15 -18
  48. package/dist/utils/watch.js +0 -1
  49. package/lib/apis/picoding.js +2 -0
  50. package/lib/core/index.js +131 -132
  51. package/lib/effects/index.js +46 -57
  52. package/lib/index.js +82 -49
  53. package/lib/model/index.js +14 -21
  54. package/lib/model/strategy/adapter/dataVariant/adapter.js +38 -50
  55. package/lib/model/strategy/adapter/dataVariant/evaluator.js +162 -236
  56. package/lib/model/strategy/adapter/dataVariant/examples.js +229 -237
  57. package/lib/model/strategy/adapter/dataVariant/index.js +39 -34
  58. package/lib/model/strategy/adapter/dataVariant/type.js +57 -28
  59. package/lib/model/strategy/adapter/index.js +100 -64
  60. package/lib/model/strategy/adapter/itemRule/adapter.js +156 -144
  61. package/lib/model/strategy/adapter/itemRule/evaluator.js +36 -48
  62. package/lib/model/strategy/adapter/itemRule/examples.js +295 -225
  63. package/lib/model/strategy/adapter/itemRule/index.js +83 -57
  64. package/lib/model/strategy/adapter/itemRule/type.js +97 -36
  65. package/lib/model/strategy/adapter/promotion/adapter.js +91 -69
  66. package/lib/model/strategy/adapter/promotion/evaluator.js +444 -310
  67. package/lib/model/strategy/adapter/promotion/examples.js +222 -234
  68. package/lib/model/strategy/adapter/promotion/index.js +1 -0
  69. package/lib/model/strategy/adapter/promotion/type.js +243 -36
  70. package/lib/model/strategy/adapter/type.js +4 -16
  71. package/lib/model/strategy/adapter/walletPass/evaluator.js +180 -150
  72. package/lib/model/strategy/adapter/walletPass/example.js +217 -190
  73. package/lib/model/strategy/adapter/walletPass/index.js +75 -51
  74. package/lib/model/strategy/adapter/walletPass/locales.js +36 -58
  75. package/lib/model/strategy/adapter/walletPass/type.js +4 -16
  76. package/lib/model/strategy/adapter/walletPass/utils.js +588 -378
  77. package/lib/model/strategy/engine.js +270 -168
  78. package/lib/model/strategy/index.js +49 -34
  79. package/lib/model/strategy/strategy-example.js +243 -239
  80. package/lib/model/strategy/type.js +100 -40
  81. package/lib/modules/Account/index.js +39 -53
  82. package/lib/modules/Account/types.js +20 -33
  83. package/lib/modules/AccountList/index.js +116 -154
  84. package/lib/modules/AccountList/types.js +30 -31
  85. package/lib/modules/AccountList/utils.js +18 -30
  86. package/lib/modules/BaseModule.js +23 -42
  87. package/lib/modules/BookingContext/index.js +158 -136
  88. package/lib/modules/BookingContext/types.js +46 -32
  89. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +138 -146
  90. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +78 -83
  91. package/lib/modules/BookingContext/utils/cacheItemToBookingInput.js +170 -150
  92. package/lib/modules/BookingContext/utils/flexible.js +38 -55
  93. package/lib/modules/BookingContext/utils/formatResourceList.js +19 -34
  94. package/lib/modules/BookingContext/utils/index.js +124 -41
  95. package/lib/modules/BookingContext/utils/noResource.js +58 -70
  96. package/lib/modules/BookingContext/utils/orderLineDisplay.js +14 -41
  97. package/lib/modules/BookingContext/utils/productExtend.js +202 -155
  98. package/lib/modules/BookingContext/utils/resourceErrors.js +53 -53
  99. package/lib/modules/BookingContext/utils/resourceSelection.js +19 -41
  100. package/lib/modules/BookingContext/utils/resources.js +209 -167
  101. package/lib/modules/BookingContext/utils/serviceTimes.js +115 -116
  102. package/lib/modules/BookingContext/utils/timeSlices.js +76 -86
  103. package/lib/modules/Cart/index.js +170 -124
  104. package/lib/modules/Cart/types.js +46 -51
  105. package/lib/modules/Cart/utils/cartAccount.js +40 -39
  106. package/lib/modules/Cart/utils/cartDate.js +56 -61
  107. package/lib/modules/Cart/utils/cartDiscount.js +28 -33
  108. package/lib/modules/Cart/utils/cartNote.js +27 -32
  109. package/lib/modules/Cart/utils/cartProduct.js +321 -251
  110. package/lib/modules/Cart/utils/cartRelationForms.js +29 -35
  111. package/lib/modules/Cart/utils/cartResource.js +70 -78
  112. package/lib/modules/Cart/utils/changePrice.js +22 -50
  113. package/lib/modules/Cart/utils/index.js +106 -48
  114. package/lib/modules/Customer/constants.js +13 -34
  115. package/lib/modules/Customer/index.js +235 -172
  116. package/lib/modules/Customer/types.js +38 -35
  117. package/lib/modules/Date/index.js +116 -115
  118. package/lib/modules/Date/types.js +16 -28
  119. package/lib/modules/Date/utils.js +174 -123
  120. package/lib/modules/Discount/index.js +122 -127
  121. package/lib/modules/Discount/types.js +9 -31
  122. package/lib/modules/Guests/index.js +30 -56
  123. package/lib/modules/Guests/types.js +23 -33
  124. package/lib/modules/Holder/index.js +209 -189
  125. package/lib/modules/Holder/types.js +4 -16
  126. package/lib/modules/Holder/utils.js +20 -49
  127. package/lib/modules/OpenData/index.js +70 -76
  128. package/lib/modules/OpenData/types.js +4 -16
  129. package/lib/modules/OpenData/utils.js +44 -78
  130. package/lib/modules/Order/index.d.ts +1 -1
  131. package/lib/modules/Order/index.js +1728 -2123
  132. package/lib/modules/Order/payment-utils.js +77 -120
  133. package/lib/modules/Order/types.d.ts +1 -1
  134. package/lib/modules/Order/types.js +87 -35
  135. package/lib/modules/Order/utils/bundleDiscountHydration.js +41 -74
  136. package/lib/modules/Order/utils/discountProductLineIdentity.js +142 -100
  137. package/lib/modules/Order/utils/manualProductDiscount.js +124 -123
  138. package/lib/modules/Order/utils/orderCollectionIdentity.js +184 -244
  139. package/lib/modules/Order/utils.js +814 -647
  140. package/lib/modules/Payment/cash.js +20 -33
  141. package/lib/modules/Payment/cashRecommendationAlgorithm.js +145 -76
  142. package/lib/modules/Payment/eftpos.js +16 -30
  143. package/lib/modules/Payment/index.js +532 -399
  144. package/lib/modules/Payment/mx51.js +1 -0
  145. package/lib/modules/Payment/types.js +230 -108
  146. package/lib/modules/Payment/utils.js +52 -51
  147. package/lib/modules/Payment/walletpass.js +485 -660
  148. package/lib/modules/Product/index.js +51 -46
  149. package/lib/modules/Product/types.js +4 -16
  150. package/lib/modules/Product/utils.js +32 -33
  151. package/lib/modules/ProductList/index.js +113 -123
  152. package/lib/modules/ProductList/types.js +9 -31
  153. package/lib/modules/Quotation/index.js +66 -100
  154. package/lib/modules/Quotation/types.js +4 -16
  155. package/lib/modules/Resource/index.js +27 -59
  156. package/lib/modules/Resource/types.js +22 -32
  157. package/lib/modules/Resource/utils.js +30 -38
  158. package/lib/modules/ResourcePlanner/index.js +60 -61
  159. package/lib/modules/ResourcePlanner/planner.js +346 -384
  160. package/lib/modules/ResourcePlanner/types.js +4 -16
  161. package/lib/modules/Rules/index.js +1218 -959
  162. package/lib/modules/Rules/types.js +17 -40
  163. package/lib/modules/SalesSummary/index.js +85 -90
  164. package/lib/modules/SalesSummary/types.js +4 -16
  165. package/lib/modules/SalesSummary/utils.js +355 -430
  166. package/lib/modules/ScanOrderLogger/index.js +59 -79
  167. package/lib/modules/ScanOrderLogger/providers/feishu.js +54 -78
  168. package/lib/modules/ScanOrderLogger/providers/grafana.js +13 -36
  169. package/lib/modules/ScanOrderLogger/types.js +4 -16
  170. package/lib/modules/Schedule/getDateIsInSchedule.js +334 -163
  171. package/lib/modules/Schedule/index.js +100 -114
  172. package/lib/modules/Schedule/type.js +4 -16
  173. package/lib/modules/Schedule/types.js +4 -16
  174. package/lib/modules/Schedule/utils.js +433 -291
  175. package/lib/modules/Step/index.js +40 -52
  176. package/lib/modules/Step/tyeps.js +4 -16
  177. package/lib/modules/Summary/index.js +66 -71
  178. package/lib/modules/Summary/types.js +4 -16
  179. package/lib/modules/Summary/utils.d.ts +1 -1
  180. package/lib/modules/Summary/utils.js +773 -418
  181. package/lib/modules/SurchargeList/index.js +46 -60
  182. package/lib/modules/SurchargeList/types.js +4 -16
  183. package/lib/modules/index.js +245 -63
  184. package/lib/plugins/app.js +4 -16
  185. package/lib/plugins/index.js +36 -25
  186. package/lib/plugins/request.js +137 -126
  187. package/lib/plugins/shopStore.js +4 -16
  188. package/lib/plugins/user.js +4 -16
  189. package/lib/plugins/window.js +171 -179
  190. package/lib/server/index.js +3027 -2655
  191. package/lib/server/modules/floor-plan/index.js +102 -123
  192. package/lib/server/modules/floor-plan/types.js +15 -30
  193. package/lib/server/modules/index.js +106 -68
  194. package/lib/server/modules/menu/index.js +146 -122
  195. package/lib/server/modules/menu/types.js +18 -31
  196. package/lib/server/modules/order/index.js +758 -956
  197. package/lib/server/modules/order/types.js +122 -33
  198. package/lib/server/modules/order/utils/filterBookings.js +219 -194
  199. package/lib/server/modules/order/utils/filterOrders.js +118 -92
  200. package/lib/server/modules/payment/index.js +59 -83
  201. package/lib/server/modules/payment/types.js +4 -16
  202. package/lib/server/modules/products/index.js +575 -459
  203. package/lib/server/modules/products/types.js +44 -34
  204. package/lib/server/modules/quotation/index.js +137 -172
  205. package/lib/server/modules/quotation/types.js +21 -31
  206. package/lib/server/modules/resource/index.js +213 -184
  207. package/lib/server/modules/resource/types.js +42 -33
  208. package/lib/server/modules/schedule/index.js +135 -123
  209. package/lib/server/modules/schedule/types.js +14 -21
  210. package/lib/server/modules/schedule/utils.js +334 -163
  211. package/lib/server/types.js +4 -16
  212. package/lib/server/utils/index.js +25 -23
  213. package/lib/server/utils/product.js +196 -139
  214. package/lib/server/utils/schedule.js +34 -41
  215. package/lib/server/utils/small-ticket.js +479 -456
  216. package/lib/server/utils/time.js +40 -49
  217. package/lib/solution/BaseSales/index.js +1209 -1412
  218. package/lib/solution/BaseSales/types.js +42 -38
  219. package/lib/solution/BaseSales/utils/cartPromotion.js +650 -502
  220. package/lib/solution/BaseSales/utils/parseSalesResponse.js +85 -105
  221. package/lib/solution/BaseSales/utils/quotationPrice.js +56 -114
  222. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +108 -145
  223. package/lib/solution/BaseSales/utils.js +158 -143
  224. package/lib/solution/BookingByStep/index.d.ts +1 -1
  225. package/lib/solution/BookingByStep/index.js +1527 -1340
  226. package/lib/solution/BookingByStep/types.js +40 -99
  227. package/lib/solution/BookingByStep/utils/capacity.js +192 -160
  228. package/lib/solution/BookingByStep/utils/products.js +42 -52
  229. package/lib/solution/BookingByStep/utils/resources.js +527 -330
  230. package/lib/solution/BookingByStep/utils/stock.js +65 -44
  231. package/lib/solution/BookingByStep/utils/timeslots.js +129 -131
  232. package/lib/solution/BookingTicket/index.d.ts +1 -13
  233. package/lib/solution/BookingTicket/index.js +594 -514
  234. package/lib/solution/BookingTicket/types.js +99 -77
  235. package/lib/solution/BookingTicket/utils/addProductDecision.js +225 -187
  236. package/lib/solution/BookingTicket/utils/addTimeAvailability.js +58 -89
  237. package/lib/solution/BookingTicket/utils/bookingStatus.js +107 -78
  238. package/lib/solution/BookingTicket/utils/cartView.js +114 -99
  239. package/lib/solution/BookingTicket/utils/exampleData.js +185 -0
  240. package/lib/solution/BookingTicket/utils/orderCustomer.js +18 -41
  241. package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.js +219 -86
  242. package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +168 -116
  243. package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +79 -91
  244. package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.js +54 -41
  245. package/lib/solution/BookingTicket/utils/scan/handleScan.js +84 -81
  246. package/lib/solution/BookingTicket/utils/scan/index.js +98 -104
  247. package/lib/solution/BookingTicket/utils/scan/scanCache.js +90 -43
  248. package/lib/solution/BookingTicket/utils/scan/scanProductValues.js +52 -64
  249. package/lib/solution/BookingTicket/utils/sessionCatalogStale.js +56 -58
  250. package/lib/solution/BookingTicket/utils/weighingProductSku.js +34 -48
  251. package/lib/solution/BuyTickets/index.js +67 -70
  252. package/lib/solution/BuyTickets/types.js +22 -38
  253. package/lib/solution/Checkout/index.js +1451 -1158
  254. package/lib/solution/Checkout/types.js +91 -61
  255. package/lib/solution/Checkout/utils/index.js +228 -156
  256. package/lib/solution/PlaceOrder/index.js +55 -0
  257. package/lib/solution/RegisterAndLogin/config.js +493 -460
  258. package/lib/solution/RegisterAndLogin/index.js +633 -630
  259. package/lib/solution/RegisterAndLogin/types.js +189 -76
  260. package/lib/solution/RegisterAndLogin/utils.js +183 -125
  261. package/lib/solution/Sales/index.js +328 -324
  262. package/lib/solution/Sales/types.js +27 -33
  263. package/lib/solution/ScanOrder/index.js +832 -864
  264. package/lib/solution/ScanOrder/types.js +33 -34
  265. package/lib/solution/ScanOrder/utils.js +409 -374
  266. package/lib/solution/ShopDiscount/index.js +226 -232
  267. package/lib/solution/ShopDiscount/types.js +15 -37
  268. package/lib/solution/ShopDiscount/utils.js +300 -172
  269. package/lib/solution/UnifiedBookingSales/index.js +437 -487
  270. package/lib/solution/UnifiedBookingSales/types.js +12 -31
  271. package/lib/solution/VenueBooking/index.js +811 -879
  272. package/lib/solution/VenueBooking/types.js +19 -39
  273. package/lib/solution/VenueBooking/utils/dateSummary.js +27 -56
  274. package/lib/solution/VenueBooking/utils/resource.js +31 -54
  275. package/lib/solution/VenueBooking/utils/slotMerge.js +94 -107
  276. package/lib/solution/VenueBooking/utils/timeSlot.js +132 -132
  277. package/lib/solution/VenueBooking/utils.js +130 -67
  278. package/lib/solution/index.js +124 -41
  279. package/lib/store/createStore.js +32 -29
  280. package/lib/types/index.js +4 -16
  281. package/lib/utils/payment-number.js +26 -46
  282. package/lib/utils/task.js +36 -36
  283. package/lib/utils/watch.js +81 -47
  284. 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
+ }