query_order_receivable_cost_details.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. class QueryOrderReceivableCostDetailsTool:
  2. name = 'query_order_receivable_cost_details'
  3. route_path = '/mcp/tools/queryOrderReceivableCostDetails'
  4. def __init__(self, api_client=None):
  5. self.api_client = api_client
  6. def metadata(self):
  7. return {
  8. 'name': self.name,
  9. 'description': (
  10. '按明确订单号分页查询应收费用行、费用确认、关账和核销状态。调用前必须'
  11. '确认用户提供的是订单号;不得使用参考号、物流单号或其他号码猜单,不得模糊'
  12. '查询、跨字段试查或改用其他工具重试。公司、员工、菜单权限和客户数据范围由'
  13. '当前设备会话确定,调用方不得覆盖。'
  14. ),
  15. 'input_schema': {
  16. 'type': 'object',
  17. 'properties': {
  18. 'order_number': {
  19. 'type': 'string', 'minLength': 1, 'maxLength': 100,
  20. 'pattern': '.*\\S.*',
  21. },
  22. 'page': {
  23. 'type': 'integer', 'minimum': 1, 'maximum': 100,
  24. 'default': 1,
  25. },
  26. 'limit': {
  27. 'type': 'integer', 'minimum': 1, 'maximum': 100,
  28. 'default': 20,
  29. },
  30. },
  31. 'required': ['order_number'],
  32. 'additionalProperties': False,
  33. },
  34. }
  35. def call(
  36. self,
  37. order_number,
  38. page=1,
  39. limit=20,
  40. request_id='rq_query_order_receivable_cost_details',
  41. ):
  42. if self.api_client is None:
  43. raise RuntimeError(
  44. 'api client is required for query_order_receivable_cost_details'
  45. )
  46. payload = {
  47. 'order_number': self._order_number(order_number),
  48. 'page': self._bounded_integer(page, 'page'),
  49. 'limit': self._bounded_integer(limit, 'limit'),
  50. }
  51. return self.api_client.call_tool(
  52. self.name, self.route_path, payload, request_id
  53. )
  54. @staticmethod
  55. def _order_number(value):
  56. if not isinstance(value, str):
  57. raise ValueError('order_number is invalid')
  58. value = value.strip()
  59. if not value or len(value) > 100:
  60. raise ValueError('order_number is invalid')
  61. return value
  62. @staticmethod
  63. def _bounded_integer(value, field):
  64. if (
  65. isinstance(value, bool)
  66. or not isinstance(value, int)
  67. or value < 1
  68. or value > 100
  69. ):
  70. raise ValueError('{0} is invalid'.format(field))
  71. return value