Files
lzwcai-mcp-server-package/lzwcai_mcpskills_analyzeWorkOrder/lzwcai_mcpskills_analyzeWorkOrder/businessQueries.json
yuanzhipeng 053d98dffd feat(analyzeWorkOrder): 重构工单分析MCP技能模块并更新业务查询配置
- 将项目名称从 lzwcai-mcp-sqlexecutor 重命名为 lzwcai-mcpskills-analyzeWorkOrder
- 更新 README.md 中的安装命令、使用说明和配置示例
- 本地化业务查询名称,将中文业务名称改为英文,如"查询列表"改为"QueryList"
- 优化SQL模板,移除中文列别名,使用英文字段名
- 新增销售订单相关查询功能,包括订单列表、订单详情、交付风险预测
- 添加部门人效产值损耗三维仪表盘查询
- 更新包的初始化信息和版本号
2026-01-07 22:05:44 +08:00

76 lines
16 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
[
{
"id": "2006300000000000000",
"businessName": "QueryList",
"businessDescription": "查询所有工单列表返回fact_work_order表的全部数据",
"datasourceId": "19",
"sqlTemplate": "SELECT * FROM fact_work_order",
"parameters": {}
},
{
"id": "2006300000000000004",
"businessName": "WorkOrderDetail",
"businessDescription": "根据工单编号查询工单详情,包括工单基本信息、产品信息、委外供应商、工艺路线等",
"datasourceId": "19",
"sqlTemplate": "SELECT wo.work_order_id, wo.work_order_number, wo.status, wo.planned_qty, wo.completed_qty, wo.operation_good_qty, wo.operation_bad_qty, wo.qc_good_qty, wo.qc_bad_qty, wo.source_doc_number, wo.event_time_utc, p.product_code, p.product_name, p.product_spec, s.supplier_name, r.routing_name FROM fact_work_order wo LEFT JOIN dim_product p ON wo.product_id = p.product_id AND p.is_current = true LEFT JOIN dim_supplier s ON wo.supplier_id = s.supplier_id AND s.is_current = true LEFT JOIN dim_routing r ON wo.routing_id = r.routing_id AND r.is_current = true WHERE wo.work_order_number = '{workOrderNumber}'",
"parameters": {
"workOrderNumber": {
"type": "string",
"description": "工单编号",
"required": true,
"examples": [
"WO1311343859"
]
}
}
},
{
"id": "2006300000000000005",
"businessName": "WorkOrderProgressDashboard",
"businessDescription": "工单执行进度与异常节点看板,展示工单完工进度、工序良率、质检良率、异常标识等关键监控指标",
"datasourceId": "19",
"sqlTemplate": "WITH work_order_progress AS (SELECT wo.work_order_number, wo.status AS work_order_status, wo.planned_qty, wo.completed_qty, wo.operation_good_qty, wo.operation_bad_qty, wo.qc_good_qty, wo.qc_bad_qty, wo.source_doc_number AS sales_order_number, wo.event_time_utc, p.product_code, p.product_name, CASE WHEN wo.planned_qty > 0 THEN ROUND(wo.completed_qty * 100.0 / wo.planned_qty, 2) ELSE 0 END AS completion_pct, CASE WHEN (wo.operation_good_qty + wo.operation_bad_qty) > 0 THEN ROUND(wo.operation_good_qty * 100.0 / (wo.operation_good_qty + wo.operation_bad_qty), 2) ELSE NULL END AS operation_yield_pct, CASE WHEN (wo.qc_good_qty + wo.qc_bad_qty) > 0 THEN ROUND(wo.qc_good_qty * 100.0 / (wo.qc_good_qty + wo.qc_bad_qty), 2) ELSE NULL END AS qc_yield_pct FROM fact_work_order wo LEFT JOIN dim_product p ON wo.product_id = p.product_id AND p.is_current = true), task_summary AS (SELECT work_order_number, COUNT(*) AS total_tasks, SUM(CASE WHEN actual_end_time_utc IS NOT NULL THEN 1 ELSE 0 END) AS completed_tasks, SUM(CASE WHEN actual_start_time_utc IS NOT NULL AND actual_end_time_utc IS NULL THEN 1 ELSE 0 END) AS in_progress_tasks, SUM(CASE WHEN actual_start_time_utc IS NULL THEN 1 ELSE 0 END) AS pending_tasks, SUM(bad_qty) AS total_bad_qty FROM fact_operation_task GROUP BY work_order_number), labor_summary AS (SELECT work_order_number, SUM(report_qty) AS total_report_qty, SUM(good_qty) AS total_good_qty, SUM(bad_qty) AS total_bad_qty, SUM(duration_minutes) AS total_work_minutes FROM fact_labor_report GROUP BY work_order_number), qc_summary AS (SELECT work_order_number, COUNT(*) AS qc_record_count, SUM(pass_qty) AS total_pass_qty, SUM(fail_qty) AS total_fail_qty FROM fact_quality_inspection WHERE work_order_number IS NOT NULL GROUP BY work_order_number) SELECT wp.work_order_number, wp.product_code, wp.product_name, wp.sales_order_number, wp.work_order_status, wp.planned_qty, wp.completed_qty, wp.completion_pct, COALESCE(ts.total_tasks, 0) AS total_tasks, COALESCE(ts.completed_tasks, 0) AS completed_tasks, COALESCE(ts.in_progress_tasks, 0) AS in_progress_tasks, COALESCE(ts.pending_tasks, 0) AS pending_tasks, COALESCE(ls.total_report_qty, 0) AS total_report_qty, COALESCE(ls.total_work_minutes, 0) AS total_work_minutes, wp.operation_yield_pct, wp.qc_yield_pct, COALESCE(qc.total_pass_qty, 0) AS qc_pass_qty, COALESCE(qc.total_fail_qty, 0) AS qc_fail_qty, CASE WHEN wp.completion_pct < 50 AND wp.work_order_status = 'STARTED' THEN 'PROGRESS_DELAY' WHEN wp.operation_yield_pct < 90 THEN 'OPERATION_YIELD_ABNORMAL' WHEN wp.qc_yield_pct < 95 THEN 'QC_YIELD_ABNORMAL' WHEN ts.total_bad_qty > 0 THEN 'HAS_DEFECTS' ELSE 'NORMAL' END AS abnormal_flag, wp.event_time_utc AS last_update_time FROM work_order_progress wp LEFT JOIN task_summary ts ON wp.work_order_number = ts.work_order_number LEFT JOIN labor_summary ls ON wp.work_order_number = ls.work_order_number LEFT JOIN qc_summary qc ON wp.work_order_number = qc.work_order_number ORDER BY CASE wp.work_order_status WHEN 'STARTED' THEN 1 WHEN 'RELEASED' THEN 2 WHEN 'PLANNED' THEN 3 ELSE 4 END, wp.event_time_utc DESC",
"parameters": {}
},
{
"id": "2006300000000000006",
"businessName": "SalesOrderList",
"businessDescription": "历史订单列表:查询所有销售订单,包含客户信息、订单金额、收款状态、交货日期等关键信息",
"datasourceId": "19",
"sqlTemplate": "SELECT so.sales_order_id, so.sales_order_number, c.customer_name, so.contract_number, so.order_date_utc, so.delivery_date_utc, so.deal_amount, so.currency_code, so.payment_status, so.stage, so.result, so.transport_mode, so.production_doc_number, so.event_time_utc FROM fact_sales_order so LEFT JOIN dim_customer c ON so.customer_id = c.customer_id AND c.is_current = true ORDER BY so.order_date_utc DESC",
"parameters": {}
},
{
"id": "2006300000000000007",
"businessName": "SalesOrderDetail",
"businessDescription": "订单详情:根据订单编号查询订单详细信息,包含客户信息、销售员、合同、金额、交货日期、收款状态等完整信息",
"datasourceId": "19",
"sqlTemplate": "SELECT so.sales_order_id, so.sales_order_number, c.customer_name, c.customer_level, c.phone AS customer_phone, c.email AS customer_email, c.address AS customer_address, p.person_name AS sales_person_name, so.contract_number, ct.contract_name, ct.contract_amount, so.order_date_utc, so.delivery_date_utc, so.deal_amount, so.currency_code, so.fx_rate, so.payment_status, so.transport_mode, so.packaging, so.customs_number, so.production_doc_number, so.stage, so.result, so.event_time_utc FROM fact_sales_order so LEFT JOIN dim_customer c ON so.customer_id = c.customer_id AND c.is_current = true LEFT JOIN dim_person p ON so.sales_person_id = p.person_id AND p.is_current = true LEFT JOIN dim_contract ct ON so.contract_id = ct.contract_id AND ct.is_current = true WHERE so.sales_order_number = '{salesOrderNumber}'",
"parameters": {
"salesOrderNumber": {
"type": "string",
"description": "销售订单编号",
"required": true,
"examples": [
"SO20251225001"
]
}
}
},
{
"id": "2006300000000000008",
"businessName": "DeliveryRiskPrediction",
"businessDescription": "交付风险预测:基于历史订单的生产周期、物流延误、设备故障等特征,计算延迟概率与红/黄/绿预警等级",
"datasourceId": "19",
"sqlTemplate": "WITH global_production AS (SELECT COUNT(*) AS total_wo_count, AVG(CASE WHEN planned_qty > 0 THEN completed_qty / planned_qty ELSE 0 END) AS avg_completion_rate, SUM(CASE WHEN status IN ('OPEN', 'STARTED') THEN 1 ELSE 0 END) AS pending_wo_count, SUM(CASE WHEN status = 'CLOSED' THEN 1 ELSE 0 END) AS closed_wo_count FROM fact_work_order), global_quality AS (SELECT COUNT(*) AS total_inspection_count, SUM(COALESCE(pass_qty, 0)) AS total_pass_qty, SUM(COALESCE(fail_qty, 0)) AS total_fail_qty, CASE WHEN SUM(COALESCE(pass_qty, 0) + COALESCE(fail_qty, 0)) > 0 THEN SUM(COALESCE(pass_qty, 0))::FLOAT / SUM(COALESCE(pass_qty, 0) + COALESCE(fail_qty, 0)) ELSE 1 END AS qc_pass_rate FROM fact_quality_inspection), global_operation AS (SELECT COUNT(*) AS total_task_count, SUM(COALESCE(good_qty, 0)) AS total_good_qty, SUM(COALESCE(bad_qty, 0)) AS total_bad_qty, CASE WHEN SUM(COALESCE(good_qty, 0) + COALESCE(bad_qty, 0)) > 0 THEN SUM(COALESCE(bad_qty, 0))::FLOAT / SUM(COALESCE(good_qty, 0) + COALESCE(bad_qty, 0)) ELSE 0 END AS operation_defect_rate FROM fact_operation_task), customer_shipment AS (SELECT customer_id, COUNT(*) AS shipment_count, SUM(COALESCE(amount, 0)) AS total_shipment_amount FROM fact_sales_shipment GROUP BY customer_id), customer_return AS (SELECT customer_id, COUNT(*) AS return_count, SUM(COALESCE(amount, 0)) AS total_return_amount FROM fact_sales_return GROUP BY customer_id), order_risk AS (SELECT so.sales_order_id, so.sales_order_number, c.customer_name, so.order_date_utc, so.deal_amount, so.payment_status, gp.avg_completion_rate AS production_completion_rate, gp.pending_wo_count, gp.total_wo_count AS work_order_count, gq.qc_pass_rate, gq.total_fail_qty, go.operation_defect_rate, COALESCE(cs.shipment_count, 0) AS shipment_count, COALESCE(cr.return_count, 0) AS return_count, CASE WHEN COALESCE(cs.shipment_count, 0) > 0 THEN COALESCE(cr.return_count, 0)::FLOAT / cs.shipment_count ELSE 0 END AS return_rate FROM fact_sales_order so LEFT JOIN dim_customer c ON so.customer_id = c.customer_id AND c.is_current = true CROSS JOIN global_production gp CROSS JOIN global_quality gq CROSS JOIN global_operation go LEFT JOIN customer_shipment cs ON so.customer_id = cs.customer_id LEFT JOIN customer_return cr ON so.customer_id = cr.customer_id) SELECT sales_order_id, sales_order_number, customer_name, order_date_utc, deal_amount, payment_status, work_order_count, ROUND(production_completion_rate::NUMERIC, 2) AS production_completion_rate, pending_wo_count, ROUND(qc_pass_rate::NUMERIC, 2) AS qc_pass_rate, ROUND(operation_defect_rate::NUMERIC, 4) AS operation_defect_rate, return_count, ROUND(return_rate::NUMERIC, 4) AS return_rate, ROUND((CASE WHEN production_completion_rate < 0.3 THEN 0.30 WHEN production_completion_rate < 0.5 THEN 0.20 WHEN production_completion_rate < 0.8 THEN 0.10 ELSE 0 END + CASE WHEN qc_pass_rate < 0.8 THEN 0.25 WHEN qc_pass_rate < 0.9 THEN 0.15 WHEN qc_pass_rate < 0.95 THEN 0.08 ELSE 0 END + CASE WHEN operation_defect_rate > 0.1 THEN 0.20 WHEN operation_defect_rate > 0.05 THEN 0.12 WHEN operation_defect_rate > 0.02 THEN 0.05 ELSE 0 END + CASE WHEN return_rate > 0.1 THEN 0.15 WHEN return_rate > 0.05 THEN 0.08 WHEN return_rate > 0.02 THEN 0.03 ELSE 0 END + CASE WHEN payment_status = 'UNPAID' THEN 0.10 WHEN payment_status = 'PARTIAL' THEN 0.05 ELSE 0 END)::NUMERIC, 2) AS delay_probability, CASE WHEN (CASE WHEN production_completion_rate < 0.3 THEN 0.30 WHEN production_completion_rate < 0.5 THEN 0.20 WHEN production_completion_rate < 0.8 THEN 0.10 ELSE 0 END + CASE WHEN qc_pass_rate < 0.8 THEN 0.25 WHEN qc_pass_rate < 0.9 THEN 0.15 WHEN qc_pass_rate < 0.95 THEN 0.08 ELSE 0 END + CASE WHEN operation_defect_rate > 0.1 THEN 0.20 WHEN operation_defect_rate > 0.05 THEN 0.12 WHEN operation_defect_rate > 0.02 THEN 0.05 ELSE 0 END + CASE WHEN return_rate > 0.1 THEN 0.15 WHEN return_rate > 0.05 THEN 0.08 WHEN return_rate > 0.02 THEN 0.03 ELSE 0 END + CASE WHEN payment_status = 'UNPAID' THEN 0.10 WHEN payment_status = 'PARTIAL' THEN 0.05 ELSE 0 END) >= 0.50 THEN 'RED' WHEN (CASE WHEN production_completion_rate < 0.3 THEN 0.30 WHEN production_completion_rate < 0.5 THEN 0.20 WHEN production_completion_rate < 0.8 THEN 0.10 ELSE 0 END + CASE WHEN qc_pass_rate < 0.8 THEN 0.25 WHEN qc_pass_rate < 0.9 THEN 0.15 WHEN qc_pass_rate < 0.95 THEN 0.08 ELSE 0 END + CASE WHEN operation_defect_rate > 0.1 THEN 0.20 WHEN operation_defect_rate > 0.05 THEN 0.12 WHEN operation_defect_rate > 0.02 THEN 0.05 ELSE 0 END + CASE WHEN return_rate > 0.1 THEN 0.15 WHEN return_rate > 0.05 THEN 0.08 WHEN return_rate > 0.02 THEN 0.03 ELSE 0 END + CASE WHEN payment_status = 'UNPAID' THEN 0.10 WHEN payment_status = 'PARTIAL' THEN 0.05 ELSE 0 END) >= 0.25 THEN 'YELLOW' ELSE 'GREEN' END AS risk_level, CONCAT_WS(' | ', CASE WHEN production_completion_rate < 0.5 THEN '生产进度滞后' END, CASE WHEN qc_pass_rate < 0.9 THEN '质检通过率低' END, CASE WHEN operation_defect_rate > 0.05 THEN '工序不良率高' END, CASE WHEN return_rate > 0.05 THEN '历史退货率高' END, CASE WHEN payment_status = 'UNPAID' THEN '未付款' END) AS risk_reasons FROM order_risk ORDER BY delay_probability DESC, deal_amount DESC",
"parameters": {}
},
{
"id": "2006300000000000009",
"businessName": "DepartmentEfficiencyDashboard",
"businessDescription": "部门人效产值损耗三维仪表盘:关联订单量×工时×人员数×成本,构建人效—产值—损耗三维模型,按部门汇总展示",
"datasourceId": "19",
"sqlTemplate": "WITH order_summary AS (SELECT COUNT(DISTINCT so.sales_order_id) AS total_order_count, SUM(COALESCE(so.deal_amount, 0)) AS total_order_amount FROM fact_sales_order so), labor_by_dept AS (SELECT p.department, COUNT(DISTINCT lr.worker_name) AS worker_count, SUM(COALESCE(lr.duration_minutes, 0)) AS total_work_minutes, SUM(COALESCE(lr.report_qty, 0)) AS total_report_qty, SUM(COALESCE(lr.good_qty, 0)) AS total_good_qty, SUM(COALESCE(lr.bad_qty, 0)) AS total_bad_qty FROM fact_labor_report lr LEFT JOIN dim_person p ON lr.worker_name = p.person_name AND p.is_current = true GROUP BY p.department), work_order_output AS (SELECT p.department, SUM(COALESCE(wo.completed_qty, 0)) AS completed_qty, SUM(COALESCE(wo.operation_bad_qty, 0)) AS operation_bad_qty, SUM(COALESCE(wo.qc_bad_qty, 0)) AS qc_bad_qty, COUNT(DISTINCT wo.work_order_id) AS work_order_count FROM fact_work_order wo LEFT JOIN dim_person p ON wo.production_manager_id = p.person_id AND p.is_current = true GROUP BY p.department), scrap_by_dept AS (SELECT p.department, COUNT(*) AS scrap_count FROM fact_scrap s LEFT JOIN dim_person p ON s.operator_id = p.person_id AND p.is_current = true GROUP BY p.department), qc_by_dept AS (SELECT p.department, SUM(COALESCE(qi.pass_qty, 0)) AS qc_pass_qty, SUM(COALESCE(qi.fail_qty, 0)) AS qc_fail_qty FROM fact_quality_inspection qi LEFT JOIN dim_person p ON qi.inspector_id = p.person_id AND p.is_current = true GROUP BY p.department) SELECT COALESCE(ld.department, '未分配') AS department, os.total_order_count, os.total_order_amount, COALESCE(ld.worker_count, 0) AS worker_count, COALESCE(ld.total_work_minutes, 0) AS total_work_minutes, ROUND(COALESCE(ld.total_work_minutes, 0) / 60.0, 2) AS total_work_hours, COALESCE(ld.total_report_qty, 0) AS total_report_qty, COALESCE(ld.total_good_qty, 0) AS total_good_qty, COALESCE(ld.total_bad_qty, 0) AS labor_bad_qty, COALESCE(wo.completed_qty, 0) AS completed_qty, COALESCE(wo.work_order_count, 0) AS work_order_count, COALESCE(wo.operation_bad_qty, 0) AS operation_bad_qty, COALESCE(wo.qc_bad_qty, 0) AS qc_bad_qty, COALESCE(sc.scrap_count, 0) AS scrap_count, COALESCE(qc.qc_pass_qty, 0) AS qc_pass_qty, COALESCE(qc.qc_fail_qty, 0) AS qc_fail_qty, CASE WHEN COALESCE(ld.worker_count, 0) > 0 THEN ROUND(COALESCE(ld.total_report_qty, 0)::NUMERIC / ld.worker_count, 2) ELSE 0 END AS output_per_worker, CASE WHEN COALESCE(ld.total_work_minutes, 0) > 0 THEN ROUND(COALESCE(ld.total_report_qty, 0)::NUMERIC * 60 / ld.total_work_minutes, 2) ELSE 0 END AS output_per_hour, CASE WHEN COALESCE(ld.worker_count, 0) > 0 THEN ROUND(os.total_order_amount::NUMERIC / ld.worker_count, 2) ELSE 0 END AS order_value_per_worker, CASE WHEN (COALESCE(ld.total_good_qty, 0) + COALESCE(ld.total_bad_qty, 0)) > 0 THEN ROUND(COALESCE(ld.total_good_qty, 0)::NUMERIC * 100 / (ld.total_good_qty + ld.total_bad_qty), 2) ELSE 100 END AS labor_yield_pct, CASE WHEN (COALESCE(qc.qc_pass_qty, 0) + COALESCE(qc.qc_fail_qty, 0)) > 0 THEN ROUND(COALESCE(qc.qc_pass_qty, 0)::NUMERIC * 100 / (qc.qc_pass_qty + qc.qc_fail_qty), 2) ELSE 100 END AS qc_yield_pct, COALESCE(ld.total_bad_qty, 0) + COALESCE(wo.operation_bad_qty, 0) + COALESCE(wo.qc_bad_qty, 0) + COALESCE(qc.qc_fail_qty, 0) AS total_loss_qty, CASE WHEN COALESCE(ld.worker_count, 0) > 0 AND COALESCE(ld.total_work_minutes, 0) > 0 AND (COALESCE(ld.total_good_qty, 0) + COALESCE(ld.total_bad_qty, 0)) > 0 THEN CASE WHEN (COALESCE(ld.total_report_qty, 0)::NUMERIC / ld.worker_count) >= 100 AND (COALESCE(ld.total_report_qty, 0)::NUMERIC * 60 / ld.total_work_minutes) >= 10 AND (COALESCE(ld.total_good_qty, 0)::NUMERIC * 100 / (ld.total_good_qty + ld.total_bad_qty)) >= 95 THEN 'EXCELLENT' WHEN (COALESCE(ld.total_report_qty, 0)::NUMERIC / ld.worker_count) >= 50 AND (COALESCE(ld.total_report_qty, 0)::NUMERIC * 60 / ld.total_work_minutes) >= 5 AND (COALESCE(ld.total_good_qty, 0)::NUMERIC * 100 / (ld.total_good_qty + ld.total_bad_qty)) >= 90 THEN 'GOOD' ELSE 'NEEDS_IMPROVEMENT' END ELSE 'NO_DATA' END AS efficiency_rating FROM labor_by_dept ld CROSS JOIN order_summary os LEFT JOIN work_order_output wo ON ld.department = wo.department LEFT JOIN scrap_by_dept sc ON ld.department = sc.department LEFT JOIN qc_by_dept qc ON ld.department = qc.department ORDER BY total_report_qty DESC",
"parameters": {}
}
]