NUMBER_FIELDS = ( 'declaration_numbers', 'sys_bl_numbers', 'container_codes', 'order_numbers', 'clearance_numbers', 'customer_names', 'so_numbers', 'bl_numbers', 'trailer_numbers', 'truck_bol_numbers', 'provider_names', 'importer_names', ) NUMBER_FIELD_LABELS = { 'declaration_numbers': '报关单号', 'sys_bl_numbers': '系统提单号', 'container_codes': '柜号', 'order_numbers': '订单号', 'clearance_numbers': '清关单号', 'customer_names': '客户', 'so_numbers': 'SO号', 'bl_numbers': '提单号', 'trailer_numbers': '拖车单', 'truck_bol_numbers': '卡车单号', 'provider_names': '供应商', 'importer_names': '进口商', } FILTER_TYPES = ('查询文档类型', '添加文档类型', '录入单号种类') UPLOAD_PATH = '/mcp/upload-headhaul-document' def number_list(values, field): if not isinstance(values, list) or not values: raise ValueError(field + ' is invalid') result = [] for value in values: if not isinstance(value, str): raise ValueError(field + ' is invalid') value = value.strip() if not value or len(value) > 100: raise ValueError(field + ' is invalid') if value not in result: result.append(value) if len(result) > 200: raise ValueError('at most 200 numbers are allowed') return result def bounded_integer(value, field): if isinstance(value, bool) or not isinstance(value, int): raise ValueError(field + ' is invalid') if value < 1 or value > 100: raise ValueError(field + ' is invalid') return value def number_properties(): properties = {} for field, label in NUMBER_FIELD_LABELS.items(): properties[field] = { 'type': 'array', 'minItems': 1, 'maxItems': 200, 'items': { 'type': 'string', 'minLength': 1, 'maxLength': 100, 'pattern': '.*\\S.*', }, 'description': ( '{0}数组。仅当用户明确说{0}时使用;不得与其他号码种类混放。' .format(label) ), } return properties