class ExportPendingOutboundOrdersTool: name = 'export_pending_outbound_orders' route_path = '/mcp/tools/exportPendingOutboundOrders' FILTER_FIELDS = ( 'number', 'product_type_id', 'product_id', 'order_warehouse_id', 'receiver_country', 'is_remove', 'address', 'inbound_date', 'status', 'is_battery', 'is_magnetic', 'is_wood', 'is_other', 'is_fda', 'is_toy', 'is_ultra_limit', 'is_sensitive', 'is_food', 'no_property', 'merge_declare_number', 'importer_id', 'packing_type', ) def __init__(self, api_client=None): self.api_client = api_client def metadata(self): properties = { 'number': { 'type': 'string', 'description': '单号:订单号、参考号;多个值用空格、英文逗号或回车分隔。', }, 'product_type_id': {'type': 'integer', 'description': '产品分类 ID。'}, 'product_id': { 'type': 'array', 'items': {'type': 'integer'}, 'description': '物流产品 ID 数组。先从筛选项工具获取授权值。', }, 'order_warehouse_id': {'type': 'integer', 'description': '集货仓库 ID。'}, 'receiver_country': {'type': 'string', 'description': '目的国国家代码。'}, 'is_remove': { 'type': 'integer', 'enum': [0, 1], 'description': '是否装柜剔除:1 是,0 否。', }, 'address': {'type': 'string', 'description': '派送地址模糊筛选。'}, 'inbound_date': { 'type': 'string', 'description': '入库时间范围,格式 YYYY-MM-DD - YYYY-MM-DD。', }, 'status': { 'type': 'array', 'items': {'type': 'integer'}, 'description': '订单状态整数数组。', }, 'merge_declare_number': {'type': 'string', 'description': '合并报关单号。'}, 'importer_id': {'type': 'integer', 'description': '进口商 ID。'}, 'packing_type': { 'type': 'string', 'description': '货物类型,多选值用英文逗号拼接。', }, } for field, label in ( ('is_battery', '带电'), ('is_magnetic', '带磁'), ('is_wood', '带木'), ('is_other', '其它'), ('is_fda', 'FDA产品'), ('is_toy', '玩具'), ('is_ultra_limit', '单箱尺寸超长超重'), ('is_sensitive', '敏感货'), ('is_food', '食品'), ('no_property', '无属性'), ): properties[field] = { 'type': 'string', 'enum': ['Y'], 'description': '商品属性:{0},选中时传 Y。'.format(label), } return { 'name': self.name, 'description': ( '本工具只提交异步导出任务,不会在本次调用中等待文件生成。' '成功后返回任务引用(task_ref)和' '建议等待时间(retry_after_seconds)。稍后使用 query_export_task 单独查询' '任务状态或下载链接。' '使用场景:只有用户明确要求导出未排舱订单并需要下载文件时,才按' 'outbound/add.html的筛选条件调用。筛选名称必须先通过' 'list_pending_outbound_export_filter_options 获取当前员工有权限的 value。' '禁止使用:用户只是查看或查询订单、排舱列表或排舱详情时不得调用;' '本工具不导出已排舱列表,也不导出省外进港资料。用户只说”单号”时必须' '先确认是订单号还是客户参考号;不得用导出结果试探号码类型。' '参数名仅用于工具调用;向用户回答时只能使用中文业务名称,不得展示内部参数名。' ), 'input_schema': {'type': 'object', 'properties': properties}, } def call(self, request_id='rq_export_pending_outbound_orders', **kwargs): if self.api_client is None: raise RuntimeError('api client is required for export_pending_outbound_orders') payload = {} for field in self.FILTER_FIELDS: if field in kwargs and kwargs[field] is not None: payload[field] = kwargs[field] return self.api_client.call_tool(self.name, self.route_path, payload, request_id)