亚铭威印刷AI智能报价后台服务

基于人工智能的印刷报价与管理系统

接口组 4
接口总数 37
运行状态 ONLINE

系统基础接口

1 个接口
GET
/

展示接口总览页面

Endpoint: index

简道云同步接口

23 个接口
POST
/jdy/batchSubmitProducts

批量提交产品信息到简道云

将Excel导入的产品数据批量提交到简道云产品信息表
包含产品编号生成、外协报价判断等逻辑

请求参数:
- Body (JSON): 包含产品列表和客户信息的完整数据

返回格式:
{
"success": true,
"message": "批量提交完成",
"result": {
"submitted_count": 10,
"success_count": 10,
"error_count": 0
}
}

Endpoint: jdy.batch_submit_products
GET
/jdy/checkLength

根据高度返回插口/糊口长度

根据产品高度自动计算插口和糊口的长度

计算规则:
- 高度 < 200mm: 返回 12
- 高度 >= 200mm: 返回 15
- 计算失败: 返回默认值 12

请求参数:
- Query参数: high (产品高度,单位mm)

返回格式:
{
"length": 12 | 15
}

Endpoint: jdy.check_length
POST
/jdy/custome_acess

客户准入webhook

处理客户准入审批流程的webhook事件
包含审批通知、状态变更、客户信息表推送等逻辑

功能:
- 同步客户准入数据到MySQL
- 获取审批状态并推送企业微信通知
- 审批通过后自动推送客户信息表

请求参数:
- Body (JSON): 简道云webhook推送的客户准入数据

返回格式:
{
"success": true,
"workflow_result": {...},
"sync_result": {...},
"push_result": {...}
}

Endpoint: jdy.custome_acess
GET
/jdy/doorType

根据产品类型返回门幅分类

根据产品类型(盒型)返回对应的门幅类型
用于简道云表单中的门幅字段自动填充

请求参数:
- Query参数: product_type (产品类型/盒型)

返回格式:
{
"door_type": "纸盒" | "说明书"
}

Endpoint: jdy.door_type
POST
/jdy/generate_product_number

生成产品编号

根据客户编号、产品分类、产品类型生成唯一的产品编号
编号格式: 客户编号-产品分类-打印类型-流水号-版本号
例如: KH0680-MBX-A-001-01

请求参数:
- Body (JSON): {
"client_no": "客户编号(必填)",
"term_id": "产品分类编码(必填)",
"product_type": "产品类型/盒型(必填)",
"table_name": "产品信息表名(可选,默认product_information)",
"initial_version": "初始版本号(可选,默认01)"
}

返回格式:
{
"success": true,
"product_no": "KH0680-MBX-A-001-01"
}

Endpoint: jdy.generate_product_number
GET
/jdy/get_classification_code

通过分类名称获取分类编码

根据产品分类名称查询产品分类表,返回分类编码及相关信息

请求参数:
- Query参数: category_name (分类名称,必填)
例如: /jdy/get_classification_code?category_name=面膜盒

返回格式:
{
"success": true,
"result": {
"term_id": "MBX",
"classification_code": "001",
"category_name": "面膜盒"
}
}

Endpoint: jdy.get_classification_code
GET
/jdy/get_client_no

通过客户简称获取客户编号

根据客户简称查询客户信息表,返回客户编号及相关信息

请求参数:
- Query参数: customer_name (客户简称,必填)
例如: /jdy/get_client_no?customer_name=亚铭威

返回格式:
{
"success": true,
"result": {
"client_no": "KH0680",
"customer_full_name": "深圳市亚铭威硬件有限公司",
"customer_name": "亚铭威",
"customer_level": "A级",
"cooperation_status": "合作中"
}
}

Endpoint: jdy.get_client_no
GET
/jdy/get_customer_consignee_info

通过客户编号获取客户收件信息

根据客户编号查询客户信息表,返回客户全称和收件人信息
优先返回 is_consignee 为 "是" 的联系方式,若无则返回第一条联系方式

请求参数:
- Query参数: client_no (客户编号,必填)
例如: /jdy/get_customer_consignee_info?client_no=KH0001

返回格式:
{
"success": true,
"result": {
"customer_full_name": "深圳市某某科技有限公司",
"contact_name": "张三",
"contact_address": "深圳市南山区某某路123号",
"contact_mobile": "13800138000"
}
}

Endpoint: jdy.get_customer_consignee_info
GET
/jdy/get_material_number

通过纸张类型获取材料编号

根据纸张类型查询材料信息管理表,返回材料编号及相关信息
纸张类型是唯一的,每个类型只对应一条记录

请求参数:
- Query参数: paper_type (纸张类型,必填)
例如: /jdy/get_material_number?paper_type=白卡纸

返回格式:
{
"success": true,
"result": {
"material_numbers": "CL001",
"paper_type": "白卡纸",
"gram_weight": "250g",
"units": "张",
"unit_price": 0.85
}
}

Endpoint: jdy.get_material_number
POST
/jdy/jdy_webhook_batch

批量webhook入口

接收简道云推送的批量表单事件
用于处理批量创建、更新、删除等操作

与单条webhook的区别:
- 支持一次性接收多条数据记录
- 适合批量导入、批量审批等场景
- 数据格式: {"data": [{}, {}, ...]}

请求参数:
- Body (JSON): {
"op": "操作类型",
"data": [...], # 批量数据数组
"form_name": "表单名称"
}

返回格式:
{
"success": true,
"result": "success"
}

Endpoint: jdy.jdy_webhook_batch
POST
/jdy/schedule_message

处理定时消息推送

接收简道云的定时消息配置,执行消息推送任务
支持企业微信、邮件等多种推送方式

请求参数:
- Body (JSON): {
"message_type": "消息类型(wechat/email)",
"recipients": "接收人列表",
"content": "消息内容",
"schedule_time": "推送时间(可选)"
}

返回格式:
{
"success": true,
"result": {
"message_id": "消息ID",
"status": "sent" | "scheduled"
}
}

Endpoint: jdy.schedule_message
GET
/jdy/scheduler

调度器控制台页面

显示定时任务管理界面
支持查看任务状态、执行记录、手动触发等功能

返回: HTML页面

Endpoint: jdy.scheduler_page
GET
/jdy/scheduler/backup/<path:filename>

下载备份文件

下载调度器生成的数据库备份文件(SQL或JSON格式)

请求参数:
- Path参数: filename (备份文件名)

返回: 文件下载流

错误码:
- 404: 文件不存在
- 400: 文件名不合法
- 503: 调度器未启动

Endpoint: jdy.scheduler_backup_download
GET
/jdy/scheduler/data

查询调度器状态与执行记录

返回定时任务的运行状态、配置信息和执行历史

返回格式:
{
"status": "running" | "stopped",
"config": {...},
"history": [...]
}

Endpoint: jdy.scheduler_data
POST
/jdy/scheduler/run

手动触发定时任务

立即执行指定的定时任务,无需等待定时触发
支持同步单表、全量同步、用户映射、数据库备份等任务

请求参数:
- Body (JSON): {
"job": "任务名称(sync/sync_all/sync_user/backup)",
"options": {
"app_id": "应用ID(sync任务必填)",
"entry_id": "表单ID(sync任务必填)",
"form_name": "表单名称(sync任务必填)"
}
}

返回格式:
{
"success": true,
"message": "任务 sync 已触发"
}

Endpoint: jdy.scheduler_run
POST
/jdy/scheduler/settings

更新调度器配置

动态修改定时任务的执行频率和启用状态
包括同步间隔、备份时间、自动任务开关等

请求参数:
- Body (JSON): {
"sync_interval_minutes": "同步间隔(分钟)",
"backup_hour": "备份时刻(小时)",
"backup_minute": "备份时刻(分钟)",
"auto_sync": "是否自动同步单表",
"auto_sync_all": "是否自动全量同步",
"auto_sync_user": "是否自动同步用户映射",
"auto_backup": "是否自动备份数据库"
}

返回格式:
{
"success": true,
"config": {...} # 更新后的配置
}

Endpoint: jdy.scheduler_settings
POST
/jdy/sync

同步指定表单数据

从简道云拉取指定表单的数据并同步到MySQL数据库
自动创建或更新表结构,确保字段一致性

请求参数:
- Body (JSON): {
"app_id": "简道云应用ID",
"entry_id": "表单ID",
"form_name": "表单名称"
}

返回格式:
{
"success": true,
"result": {
"synced_count": 100,
"table_name": "customer_access"
}
}

Endpoint: jdy.sync
POST
/jdy/sync_all

全量同步应用所有表单

遍历应用下所有表单,批量同步到MySQL数据库
适合初始化或全量数据刷新场景

请求参数:
- Body (JSON): {
"app_id": "简道云应用ID"
}

返回格式:
{
"success": true,
"result": [
{"entry_id": "xxx", "synced_count": 50},
{"entry_id": "yyy", "synced_count": 100}
]
}

Endpoint: jdy.sync_all
POST
/jdy/sync_user_mapping

同步简道云与企业微信用户映射

从简道云和企业微信分别获取用户列表
根据姓名自动匹配,建立用户ID映射关系

用途:
- 用于推送企业微信消息时查找对应用户
- 审批流程中的用户身份转换

返回格式:
{
"success": true,
"message": "用户映射同步完成",
"matched_count": 50,
"total_count": 60
}

Endpoint: jdy.sync_user_mapping
POST
/jdy/testUploadFile

测试上传接口 - 返回固定 JSON 数据
- 返回: {"success": true, "data": [{"count":1},{"count":2},{"count":3}]}

Endpoint: jdy.test_upload_file
POST
/jdy/uploadFile

批量导入产品信息(Excel文件上传)

通过Excel文件批量导入产品信息到数据库

Excel列顺序(新格式):
- A: 序号(可选)
- B: 产品名称
- C: 产品分类
- D: 盒型
- E: 长(mm)
- F: 宽(mm)
- G: 高(mm)
- H: 材料品牌
- I: 材料克重
- J: 工艺
- K: 颜色
- L: 平烫面积(m²)
- M: 凸烫面积(m²)

请求参数:
- Query参数: cust_no (客户编号,可选),例如 /jdy/uploadFile?cust_no=KH0680
- Body (JSON): {
"quote_file": "https://files.jiandaoyun.com/xxx.xlsx",
"sales_operator": "用户ID(简道云)",
"jdy_username": "用户名(用于企业微信通知)"
}

返回格式:
{
"success": true,
"result": {
"message": "文件处理成功",
"parse_result": {
"status": "success",
"products": [...], # 已精简,移除冗余元数据字段
"total_count": 10,
"success_count": 10,
"error_count": 0
},
"error_file_url": "错误文件下载链接(仅当有错误时)"
}
}

注意:为应对简道云256KB响应限制,products数组中的对象已移除以下冗余字段:
- sync_batch_id, update_time, updater, upgraded_or_not
- product_info._field_id, jdy_app_id, jdy_data_id, jdy_entry_id
- product_info.create_time, creator, update_time, updater, delete_time, deleter

Endpoint: jdy.upload_file
POST
/jdy/uploadQuotation

上传报价文件并匹配已有产品

根据Excel中的产品信息,从数据库匹配已录入的产品记录

Excel列顺序:
- B: 产品名称(用于匹配)
- C: 产品分类(用于匹配)
- D: 产品类型(用于匹配)
- E: 采购数量
- F: 拼联数(异形盒必填)
- G: 拼联尺寸(异形盒必填)
- H: 地址(精确到市)
- I: 印刷调机工时(小时,可为空,默认0,不能小于0)
- J: 糊盒调机工时(小时,可为空,默认0,不能小于0)

请求参数:
- Query参数: cust_no (客户编号,必填),例如 /jdy/uploadQuotation?cust_no=KH0680
- Body (JSON): {
"quote_file": "https://files.jiandaoyun.com/xxx.xlsx",
"jdy_username": "用户名(用于企业微信通知)"
}

返回格式:
{
"success": true,
"result": {
"message": "报价文件处理成功",
"parse_result": {
"status": "success",
"quotations": [...], # 已精简,移除冗余元数据字段
"total_count": 5,
"success_count": 3,
"error_count": 2
},
"error_file_url": "错误文件下载链接(仅当有错误时)"
}
}

注意:为应对简道云256KB响应限制,quotations数组中的对象已移除以下冗余字段:
- sync_batch_id, update_time, updater, upgraded_or_not
- product_info._field_id, jdy_app_id, jdy_data_id, jdy_entry_id
- product_info.create_time, creator, update_time, updater, delete_time, deleter

Endpoint: jdy.upload_quotation
POST
/jdy/webhook

通用webhook入口

接收简道云推送的表单事件(创建、更新、删除)
自动识别表单类型并执行对应的业务逻辑

支持的事件类型:
- data_create: 数据创建
- data_update: 数据更新
- data_remove: 数据删除
- data_recover: 数据恢复

请求参数:
- Body (JSON): 简道云webhook推送的完整数据

返回格式:
{
"success": true,
"result": {
"op": "data_create",
"table_name": "product_information_sheet"
}
}

Endpoint: jdy.webhook

企业微信接口

1 个接口
POST
/wechat/send-by-mobile

按手机号发送企业微信应用消息

根据手机号查找企业微信用户并发送应用内消息
自动处理手机号与企业微信UserID的映射关系

应用场景:
- 审批流程通知
- 报价结果通知
- 系统消息推送

请求参数:
- Body (JSON): {
"mobile": "手机号(必填)",
"content": "消息内容(必填)"
}

返回格式:
{
"success": true,
"result": {
"errcode": 0,
"errmsg": "ok",
"msgid": "消息ID"
}
}

错误码:
- 400: 缺少必填参数
- 500: 发送失败(企业微信接口错误)

Endpoint: wechat.send_by_mobile

报价流程接口

12 个接口
POST
/quotation/admin/cache/clear

清空防重缓存(需谨慎使用)

清空所有防重复请求的缓存记录
用于测试或处理异常情况

注意事项:
- 清空后可能导致重复请求被执行
- 建议仅在维护期间使用
- 生产环境慎用

返回格式:
{
"success": true,
"message": "已清空 50 条缓存"
}

Endpoint: quotation.cache_clear
GET
/quotation/admin/cache/stats

查看防重缓存统计信息

用于监控和调试防重复请求机制
显示当前缓存的请求数量、命中率等统计数据

返回格式:
{
"success": true,
"stats": {
"total_requests": 100,
"duplicates_blocked": 5,
"cache_size": 50,
"hit_rate": "5%"
}
}

Endpoint: quotation.cache_stats
GET
/quotation/api/cost_reports

成本报表列表API(JSON)

获取产品报价成本明细列表(JSON格式)
供前端或第三方系统调用

请求参数:
- Query参数:
- page: 页码(默认1)
- page_size: 每页数量(默认20,最大100)

返回格式:
{
"success": true,
"page": 1,
"page_size": 20,
"rows": [
{
"id": 1,
"quote_products_no": "产品编号",
"product_name_spec": "产品名称规格",
"material_cost": 100.5,
"process_cost": 50.2,
"logistic_cost": 10.0,
"ai_quote": 180.0,
...
}
]
}

Endpoint: quotation.cost_reports_api
GET
/quotation/api/cost_reports/<int:item_id>

成本报表详情API(JSON)

获取单个产品报价的完整成本明细(JSON格式)
包含所有成本拆解字段

请求参数:
- Path参数: item_id (记录ID)

返回格式:
{
"success": true,
"item": {
"id": 1,
"quote_products_no": "产品编号",
"product_name_spec": "产品名称规格",
"material_cost": 100.5,
"process_cost": 50.2,
"logistic_cost": 10.0,
"ai_quote": 180.0,
"material_detail": {...}, # 材料成本明细
"process_detail": {...}, # 工艺成本明细
...
}
}

错误码:
- 404: 记录不存在

Endpoint: quotation.cost_report_detail_api
POST
/quotation/approval/new

报价审批表 webhook(新增数据时触发)

处理新增的报价审批记录,激活审批流程
通常在手动创建审批记录或外部系统推送时触发

处理流程:
1. 接收审批表数据并写入本地
2. 激活简道云审批流程
3. 获取审批流程URL
4. 推送企业微信通知责任业务员

请求参数:
- Body (JSON): 简道云webhook推送的报价审批表数据

返回格式:
{
"success": true,
"activate_result": {
"errcode": 0,
"flow_id": "流程ID"
}
}

Endpoint: quotation.quotation_approval_new
POST
/quotation/approval/update

报价审批表 webhook(数据更新时触发)

处理审批流程中的状态变更和流转
根据审批节点自动推送对应的企业微信通知

处理流程:
1. 接收审批表更新数据并写入本地
2. 识别当前审批节点(业务员复核/主管审批/财务审批)
3. 根据节点状态推送不同通知:
- 业务员复核通过 -> 通知主管和财务
- 主管/财务审批完成 -> 通知业务员
- 审批拒绝 -> 通知责任人
4. 审批结束后更新最终状态

请求参数:
- Body (JSON): 简道云webhook推送的报价审批表更新数据

返回格式:
{
"success": true,
"workflow_result": {
"node": "当前节点",
"status": "审批状态",
"notification_sent": true
}
}

Endpoint: quotation.quotation_approval_update
GET
/quotation/cache_stats

查看防重缓存统计信息

返回格式:
{
"success": true,
"stats": {
"total": 10,
"active_1min": 2,
"active_5min": 5,
"active_1hour": 10,
"last_cleanup": 1234567890.123,
"time_since_cleanup": 120.5,
"cache_age": {
"avg": 300.5,
"max": 600.0,
"min": 10.0
}
}
}

Endpoint: quotation.cache_stats_route
GET
/quotation/cost_reports

成本报表列表页(HTML)

展示所有产品报价的成本明细列表
支持分页查询,每页显示产品名称、规格、数量、成本构成、AI报价等

请求参数:
- Query参数:
- page: 页码(默认1)
- page_size: 每页数量(默认20,最大50)

返回: HTML页面

Endpoint: quotation.cost_reports_page
GET
/quotation/cost_reports/<quote_products_no>

成本报表详情页(HTML)

展示单个产品报价的完整成本明细
包含材料成本、工艺成本、物流成本的详细拆解

请求参数:
- Path参数: quote_products_no (产品报价编号)

返回: HTML详情页 或 404错误

Endpoint: quotation.cost_report_detail_page
GET
/quotation/healthcheck

报价模块健康检查 / 测试接口
- 返回服务基本状态及当前时间戳,便于联调验证

Endpoint: quotation.quotation_healthcheck
POST
/quotation/request

报价申请表 webhook(新增数据时触发)

完整的报价流程触发接口,自动完成从申请到审批的全链路

处理流程:
1. 接收报价申请表数据并写入本地MySQL
2. 调用成本优化API计算材料成本、工艺成本、物流成本
3. 根据成本计算AI报价
4. 将计算结果推送到简道云报价审批表
5. 同步审批表数据到本地
6. 获取审批流程URL
7. 推送企业微信通知责任业务员复核

请求参数:
- Body (JSON): 简道云webhook推送的报价申请表数据

返回格式:
{
"success": true,
"push_result": {
"data": {...}, # 审批表记录
"instance_id": "流程实例ID"
}
}

错误码:
- 500: 处理失败(计算错误、推送失败等)

Endpoint: quotation.quotation_request
POST
/quotation/request_bank

报价申请表 webhook(BANK特殊流程)

针对特定客户(BANK)的报价流程
与标准流程的区别:不设置手动拼联和随机报价参数

处理流程:
1. 接收报价申请表数据并写入本地
2. 使用BANK专用配置计算报价(不设置手动拼联)
3. 将计算结果推送到简道云报价审批表
4. 同步审批表数据到本地
5. 获取审批流程URL并通知责任业务员

请求参数:
- Body (JSON): 简道云webhook推送的报价申请表数据

返回格式:
{
"success": true,
"bank_result": {
"push_result": {...},
"calculate_result": {...}
}
}

注意:
- 该流程专为BANK客户优化
- 计算参数与标准流程有差异

Endpoint: quotation.quotation_request_bank