query_customer_unverified_bill_details.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. class QueryCustomerUnverifiedBillDetailsTool:
  2. name = 'query_customer_unverified_bill_details'
  3. route_path = '/mcp/tools/queryCustomerUnverifiedBillDetails'
  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. '分页查询当前员工有权查看的单个客户未核销账单明细。customer_id必须先从'
  11. 'list_customer_filter_options取得;主回款跟进中的月份汇总需要展开时再调用本工具。'
  12. '公司、员工、菜单权限和数据范围由当前设备会话确定,调用方不得覆盖。'
  13. ),
  14. 'input_schema': {
  15. 'type': 'object',
  16. 'properties': {
  17. 'customer_id': {'type': 'integer', 'minimum': 1},
  18. 'page': {
  19. 'type': 'integer', 'minimum': 1, 'maximum': 100,
  20. 'default': 1,
  21. },
  22. 'limit': {
  23. 'type': 'integer', 'minimum': 1, 'maximum': 100,
  24. 'default': 20,
  25. },
  26. },
  27. 'required': ['customer_id'],
  28. 'additionalProperties': False,
  29. },
  30. }
  31. def call(
  32. self, customer_id, page=1, limit=20,
  33. request_id='rq_query_customer_unverified_bill_details',
  34. ):
  35. if self.api_client is None:
  36. raise RuntimeError(
  37. 'api client is required for query_customer_unverified_bill_details'
  38. )
  39. payload = {
  40. 'customer_id': self._positive_integer(customer_id, 'customer_id'),
  41. 'page': self._bounded_integer(page, 'page'),
  42. 'limit': self._bounded_integer(limit, 'limit'),
  43. }
  44. return self.api_client.call_tool(
  45. self.name, self.route_path, payload, request_id
  46. )
  47. @staticmethod
  48. def _positive_integer(value, field):
  49. if isinstance(value, bool) or not isinstance(value, int) or value < 1:
  50. raise ValueError('{0} is invalid'.format(field))
  51. return value
  52. @classmethod
  53. def _bounded_integer(cls, value, field):
  54. value = cls._positive_integer(value, field)
  55. if value > 100:
  56. raise ValueError('{0} is invalid'.format(field))
  57. return value