export_payable_cost_list.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. from .query_payable_cost_list import QueryPayableCostListTool
  2. class ExportPayableCostListTool:
  3. name = 'export_payable_cost_list'
  4. route_path = '/mcp/tools/exportPayableCostList'
  5. def __init__(self, api_client=None):
  6. self.api_client = api_client
  7. def metadata(self):
  8. query_schema = QueryPayableCostListTool().metadata()['input_schema']
  9. properties = dict(query_schema['properties'])
  10. properties.pop('page')
  11. properties.pop('limit')
  12. return {
  13. 'name': self.name,
  14. 'description': (
  15. '只提交一个应付费用列表单页签的异步导出任务,不在本次调用内等待或轮询。'
  16. '成功后返回task_ref、状态和建议等待时间,稍后单独调用query_export_task查询。'
  17. '筛选值必须与query_payable_cost_list及list_payable_cost_filter_options一致,'
  18. '禁止混合单号猜测或勾选ID。'
  19. ),
  20. 'input_schema': {
  21. 'type': 'object', 'properties': properties,
  22. 'required': ['business_type'], 'additionalProperties': False,
  23. },
  24. }
  25. def call(
  26. self, business_type, order_numbers=None, tracking_numbers=None,
  27. container_codes=None, bl_numbers=None, so_numbers=None,
  28. business_date_start=None, business_date_end=None,
  29. cost_date_start=None, cost_date_end=None,
  30. operation_date_start=None, operation_date_end=None,
  31. business_node_id=None, provider_id=None, cost_type_ids=None,
  32. billing_status=None, payment_status=None, verification_status=None,
  33. document_type=None, request_id='rq_export_payable_cost_list',
  34. ):
  35. if self.api_client is None:
  36. raise RuntimeError('api client is required for export_payable_cost_list')
  37. payload = QueryPayableCostListTool._filters(
  38. QueryPayableCostListTool._integer(business_type, 'business_type'),
  39. order_numbers, tracking_numbers, container_codes, bl_numbers, so_numbers,
  40. business_date_start, business_date_end, cost_date_start, cost_date_end,
  41. operation_date_start, operation_date_end, business_node_id, provider_id,
  42. cost_type_ids, billing_status, payment_status, verification_status,
  43. document_type,
  44. )
  45. payload['business_type'] = business_type
  46. if business_type not in QueryPayableCostListTool.BUSINESS_TYPES:
  47. raise ValueError('business_type is invalid')
  48. return self.api_client.call_tool(self.name, self.route_path, payload, request_id)