export_pending_outbound_orders.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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. '使用场景:只有用户明确要求导出未排舱订单并需要下载文件时,才按'
  64. 'outbound/add.html的筛选条件调用。筛选名称必须先通过'
  65. 'list_pending_outbound_export_filter_options 获取当前员工有权限的 value。'
  66. '禁止使用:用户只是查看或查询订单、排舱列表或排舱详情时不得调用;'
  67. '本工具不导出已排舱列表,也不导出省外进港资料。用户只说“单号”时必须'
  68. '先确认是订单号还是客户参考号;不得用导出结果试探号码类型。'
  69. '参数名仅用于工具调用;向用户回答时只能使用中文业务名称,不得展示内部参数名。'
  70. ),
  71. 'input_schema': {'type': 'object', 'properties': properties},
  72. }
  73. def call(self, request_id='rq_export_pending_outbound_orders', **kwargs):
  74. if self.api_client is None:
  75. raise RuntimeError('api client is required for export_pending_outbound_orders')
  76. payload = {}
  77. for field in self.FILTER_FIELDS:
  78. if field in kwargs and kwargs[field] is not None:
  79. payload[field] = kwargs[field]
  80. return self.api_client.call_tool(self.name, self.route_path, payload, request_id)