export_pending_outbound_orders.py 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. class ExportPendingOutboundOrdersTool:
  2. name = 'export_pending_outbound_orders'
  3. route_path = '/mcp/tools/exportPendingOutboundOrders'
  4. FILTER_FIELDS = (
  5. 'number', 'product_type_id', 'product_id', 'order_warehouse_id',
  6. 'receiver_country', 'is_remove', 'address', 'inbound_date', 'status',
  7. 'is_battery', 'is_magnetic', 'is_wood', 'is_other', 'is_fda', 'is_toy',
  8. 'is_ultra_limit', 'is_sensitive', 'is_food', 'no_property',
  9. 'merge_declare_number', 'importer_id', 'packing_type',
  10. )
  11. def __init__(self, api_client=None):
  12. self.api_client = api_client
  13. def metadata(self):
  14. properties = {
  15. 'number': {
  16. 'type': 'string',
  17. 'description': '单号:订单号、参考号;多个值用空格、英文逗号或回车分隔。',
  18. },
  19. 'product_type_id': {'type': 'integer', 'description': '产品分类 ID。'},
  20. 'product_id': {
  21. 'type': 'array',
  22. 'items': {'type': 'integer'},
  23. 'description': '物流产品 ID 数组。先从筛选项工具获取授权值。',
  24. },
  25. 'order_warehouse_id': {'type': 'integer', 'description': '集货仓库 ID。'},
  26. 'receiver_country': {'type': 'string', 'description': '目的国国家代码。'},
  27. 'is_remove': {
  28. 'type': 'integer',
  29. 'enum': [0, 1],
  30. 'description': '是否装柜剔除:1 是,0 否。',
  31. },
  32. 'address': {'type': 'string', 'description': '派送地址模糊筛选。'},
  33. 'inbound_date': {
  34. 'type': 'string',
  35. 'description': '入库时间范围,格式 YYYY-MM-DD - YYYY-MM-DD。',
  36. },
  37. 'status': {
  38. 'type': 'array',
  39. 'items': {'type': 'integer'},
  40. 'description': '订单状态整数数组。',
  41. },
  42. 'merge_declare_number': {'type': 'string', 'description': '合并报关单号。'},
  43. 'importer_id': {'type': 'integer', 'description': '进口商 ID。'},
  44. 'packing_type': {
  45. 'type': 'string',
  46. 'description': '货物类型,多选值用英文逗号拼接。',
  47. },
  48. }
  49. for field, label in (
  50. ('is_battery', '带电'), ('is_magnetic', '带磁'), ('is_wood', '带木'),
  51. ('is_other', '其它'), ('is_fda', 'FDA产品'), ('is_toy', '玩具'),
  52. ('is_ultra_limit', '单箱尺寸超长超重'), ('is_sensitive', '敏感货'),
  53. ('is_food', '食品'), ('no_property', '无属性'),
  54. ):
  55. properties[field] = {
  56. 'type': 'string',
  57. 'enum': ['Y'],
  58. 'description': '商品属性:{0},选中时传 Y。'.format(label),
  59. }
  60. return {
  61. 'name': self.name,
  62. 'description': (
  63. '按 outbound/add.html 的筛选条件导出未排舱订单。筛选名称必须先通过 '
  64. 'list_pending_outbound_export_filter_options 获取当前员工有权限的 value。'
  65. '参数名仅用于工具调用;向用户回答时只能使用中文业务名称,不得展示内部参数名。'
  66. ),
  67. 'input_schema': {'type': 'object', 'properties': properties},
  68. }
  69. def call(self, request_id='rq_export_pending_outbound_orders', **kwargs):
  70. if self.api_client is None:
  71. raise RuntimeError('api client is required for export_pending_outbound_orders')
  72. payload = {}
  73. for field in self.FILTER_FIELDS:
  74. if field in kwargs and kwargs[field] is not None:
  75. payload[field] = kwargs[field]
  76. return self.api_client.call_tool(self.name, self.route_path, payload, request_id)