plan_column_facet_context.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. """运输计划列头 facet:从上下文参数中剥离当前列自身条件(Excel 语义)。"""
  2. from __future__ import annotations
  3. from typing import Dict, MutableMapping, Set
  4. _FIELD_ALIASES = {
  5. "loadCustomers": "loadCustomer",
  6. "deliveryCustomers": "deliveryCustomer",
  7. "contractNo": "productContract",
  8. "productPackageSpec": "packageSpec",
  9. }
  10. _FIELD_KEYS: Dict[str, Set[str]] = {
  11. "planNo": {"planNo", "planNoIn", "plan_no", "plan_no_in"},
  12. "licensePlate": {
  13. "licensePlate",
  14. "licensePlateIn",
  15. "license_plate",
  16. "license_plate_in",
  17. },
  18. "carrierName": {
  19. "carrierName",
  20. "carrierNameIn",
  21. "carrier_name",
  22. "carrier_name_in",
  23. },
  24. "loadCustomer": {
  25. "loadCustomer",
  26. "loadCustomerIn",
  27. "loadCustomers",
  28. "loadCustomersIn",
  29. "load_customers",
  30. "load_customers_in",
  31. "stopCustomers",
  32. "stop_customers",
  33. "customerKeyword",
  34. "customer_keyword",
  35. },
  36. "deliveryCustomer": {
  37. "deliveryCustomer",
  38. "deliveryCustomerIn",
  39. "deliveryCustomers",
  40. "deliveryCustomersIn",
  41. "delivery_customers",
  42. "delivery_customers_in",
  43. "stopCustomers",
  44. "stop_customers",
  45. "customerKeyword",
  46. "customer_keyword",
  47. },
  48. "productContract": {
  49. "productContract",
  50. "productContractIn",
  51. "contractNo",
  52. "contractNoIn",
  53. "contract_no",
  54. "contract_no_in",
  55. "stopKind",
  56. "stopKindIn",
  57. "stop_kind",
  58. "stop_kind_in",
  59. },
  60. "productName": {
  61. "productName",
  62. "productNameIn",
  63. "product_name",
  64. "product_name_in",
  65. },
  66. "productSpec": {
  67. "productSpec",
  68. "productSpecIn",
  69. "product_spec",
  70. "product_spec_in",
  71. },
  72. "packageSpec": {
  73. "packageSpec",
  74. "packageSpecIn",
  75. "package_spec",
  76. "package_spec_in",
  77. "productPackageSpec",
  78. "productPackageSpecIn",
  79. },
  80. "productUnit": {
  81. "productUnit",
  82. "productUnitIn",
  83. "product_unit",
  84. "product_unit_in",
  85. },
  86. "gapType": {"gapType", "gapTypeIn", "gap_type"},
  87. }
  88. def _keys_for_field(field: str) -> Set[str]:
  89. f = _FIELD_ALIASES.get((field or "").strip(), (field or "").strip())
  90. keys = _FIELD_KEYS.get(f)
  91. if keys:
  92. return set(keys)
  93. snake = "".join(["_" + c.lower() if c.isupper() else c for c in f]).lstrip("_")
  94. return {f, f"{f}In", snake, f"{snake}_in"}
  95. def strip_plan_facet_self_params(
  96. params: MutableMapping[str, object], field: str
  97. ) -> Dict[str, object]:
  98. """返回去掉当前 facet 列对应过滤键后的新 dict(不修改入参)。"""
  99. out = {k: v for k, v in params.items() if v not in (None, "")}
  100. for key in _keys_for_field(field):
  101. out.pop(key, None)
  102. for meta in ("field", "keyword", "limit"):
  103. out.pop(meta, None)
  104. return out