文章目录[隐藏]
针对小批量定制的WordPress柔性供应链插件开发详解
引言:小批量定制时代的供应链挑战
在当今个性化消费趋势下,小批量定制生产模式日益普及。传统WordPress电商网站通常对接的是标准化、大批量的供应链系统,难以适应小批量、多品种、快速响应的定制需求。柔性供应链插件正是为解决这一痛点而生,它能够在WordPress平台上实现生产订单的智能分配、供应商动态管理和生产进度跟踪等功能。
本文将详细解析如何开发一个面向小批量定制的WordPress柔性供应链插件,包含完整的代码实现和架构设计。
插件架构设计
1.1 核心功能模块
柔性供应链插件需要包含以下核心模块:
- 供应商管理模块
- 订单智能分配模块
- 生产进度跟踪模块
- 库存动态管理模块
- 数据分析与报表模块
1.2 数据库设计
<?php
/**
* 创建插件所需数据库表
* 在插件激活时执行
*/
function fsc_create_database_tables() {
global $wpdb;
$charset_collate = $wpdb->get_charset_collate();
// 供应商表
$suppliers_table = $wpdb->prefix . 'fsc_suppliers';
$suppliers_sql = "CREATE TABLE IF NOT EXISTS $suppliers_table (
id mediumint(9) NOT NULL AUTO_INCREMENT,
name varchar(100) NOT NULL,
specialty text,
capacity int NOT NULL DEFAULT 0,
current_workload int NOT NULL DEFAULT 0,
lead_time int NOT NULL DEFAULT 7,
quality_rating decimal(3,2) DEFAULT 5.00,
is_active tinyint(1) DEFAULT 1,
created_at datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
) $charset_collate;";
// 生产订单表
$orders_table = $wpdb->prefix . 'fsc_production_orders';
$orders_sql = "CREATE TABLE IF NOT EXISTS $orders_table (
id mediumint(9) NOT NULL AUTO_INCREMENT,
woo_order_id bigint(20),
product_id bigint(20),
custom_specs text,
quantity int NOT NULL,
assigned_to mediumint(9),
status varchar(50) DEFAULT 'pending',
priority int DEFAULT 1,
deadline date,
started_at datetime,
completed_at datetime,
created_at datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id),
FOREIGN KEY (assigned_to) REFERENCES $suppliers_table(id)
) $charset_collate;";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($suppliers_sql);
dbDelta($orders_sql);
}
register_activation_hook(__FILE__, 'fsc_create_database_tables');
?>
供应商管理模块开发
2.1 供应商注册与管理界面
<?php
/**
* 供应商管理类
*/
class FSC_Supplier_Manager {
/**
* 添加新供应商
* @param array $supplier_data 供应商数据
* @return int|false 供应商ID或false
*/
public function add_supplier($supplier_data) {
global $wpdb;
$table_name = $wpdb->prefix . 'fsc_suppliers';
$defaults = array(
'name' => '',
'specialty' => '',
'capacity' => 100,
'lead_time' => 7,
'quality_rating' => 5.0,
'is_active' => 1
);
$data = wp_parse_args($supplier_data, $defaults);
// 数据验证
if (empty($data['name'])) {
return new WP_Error('missing_name', __('供应商名称不能为空', 'fsc'));
}
$result = $wpdb->insert(
$table_name,
$data,
array('%s', '%s', '%d', '%d', '%f', '%d')
);
return $result ? $wpdb->insert_id : false;
}
/**
* 获取可用供应商列表
* @param array $criteria 筛选条件
* @return array 供应商列表
*/
public function get_available_suppliers($criteria = array()) {
global $wpdb;
$table_name = $wpdb->prefix . 'fsc_suppliers';
$defaults = array(
'specialty' => '',
'min_capacity' => 0,
'max_workload' => 80,
'limit' => 10
);
$args = wp_parse_args($criteria, $defaults);
$sql = "SELECT * FROM $table_name WHERE is_active = 1";
// 添加专业领域筛选
if (!empty($args['specialty'])) {
$sql .= $wpdb->prepare(" AND specialty LIKE %s", '%' . $args['specialty'] . '%');
}
// 添加容量筛选
$sql .= $wpdb->prepare(" AND capacity >= %d", $args['min_capacity']);
// 添加工作负载筛选(当前工作量/容量 < 指定百分比)
$sql .= $wpdb->prepare(" AND (current_workload / capacity * 100) < %d", $args['max_workload']);
$sql .= " ORDER BY quality_rating DESC, lead_time ASC";
$sql .= $wpdb->prepare(" LIMIT %d", $args['limit']);
return $wpdb->get_results($sql);
}
}
?>
订单智能分配算法
3.1 基于多因素评估的分配逻辑
<?php
/**
* 智能订单分配器
*/
class FSC_Order_Allocator {
/**
* 为生产订单分配合适的供应商
* @param int $order_id 生产订单ID
* @return int|WP_Error 分配的供应商ID或错误
*/
public function allocate_order($order_id) {
global $wpdb;
// 获取订单详情
$orders_table = $wpdb->prefix . 'fsc_production_orders';
$order = $wpdb->get_row($wpdb->prepare(
"SELECT * FROM $orders_table WHERE id = %d",
$order_id
));
if (!$order) {
return new WP_Error('order_not_found', __('订单不存在', 'fsc'));
}
// 获取产品定制规格
$product_specs = json_decode($order->custom_specs, true);
$required_specialty = isset($product_specs['production_type']) ?
$product_specs['production_type'] : 'general';
// 获取候选供应商
$supplier_manager = new FSC_Supplier_Manager();
$candidates = $supplier_manager->get_available_suppliers(array(
'specialty' => $required_specialty,
'min_capacity' => $order->quantity
));
if (empty($candidates)) {
// 如果没有专业匹配的供应商,尝试通用供应商
$candidates = $supplier_manager->get_available_suppliers(array(
'min_capacity' => $order->quantity
));
}
if (empty($candidates)) {
return new WP_Error('no_available_suppliers', __('没有可用的供应商', 'fsc'));
}
// 计算每个候选供应商的得分
$scored_suppliers = array();
foreach ($candidates as $supplier) {
$score = $this->calculate_supplier_score($supplier, $order);
$scored_suppliers[] = array(
'supplier' => $supplier,
'score' => $score
);
}
// 按得分排序
usort($scored_suppliers, function($a, $b) {
return $b['score'] <=> $a['score'];
});
// 选择得分最高的供应商
$selected_supplier = $scored_suppliers[0]['supplier'];
// 更新订单分配
$wpdb->update(
$orders_table,
array('assigned_to' => $selected_supplier->id, 'status' => 'assigned'),
array('id' => $order_id),
array('%d', '%s'),
array('%d')
);
// 更新供应商工作负载
$this->update_supplier_workload($selected_supplier->id, $order->quantity);
return $selected_supplier->id;
}
/**
* 计算供应商得分
* @param object $supplier 供应商对象
* @param object $order 订单对象
* @return float 综合得分
*/
private function calculate_supplier_score($supplier, $order) {
$weights = array(
'quality' => 0.4, // 质量权重
'lead_time' => 0.3, // 交货时间权重
'workload' => 0.2, // 工作负载权重
'history' => 0.1 // 合作历史权重
);
// 质量得分(0-10分)
$quality_score = $supplier->quality_rating * 2;
// 交货时间得分(时间越短得分越高)
$max_lead_time = 30; // 最大允许交货时间
$lead_time_score = 10 * (1 - ($supplier->lead_time / $max_lead_time));
$lead_time_score = max(0, min(10, $lead_time_score));
// 工作负载得分(负载越低得分越高)
$workload_ratio = $supplier->current_workload / $supplier->capacity;
$workload_score = 10 * (1 - $workload_ratio);
// 历史合作得分(简化处理)
$history_score = $this->calculate_history_score($supplier->id);
// 计算综合得分
$total_score =
$quality_score * $weights['quality'] +
$lead_time_score * $weights['lead_time'] +
$workload_score * $weights['workload'] +
$history_score * $weights['history'];
return round($total_score, 2);
}
/**
* 更新供应商工作负载
*/
private function update_supplier_workload($supplier_id, $order_quantity) {
global $wpdb;
$table_name = $wpdb->prefix . 'fsc_suppliers';
$wpdb->query($wpdb->prepare(
"UPDATE $table_name
SET current_workload = current_workload + %d
WHERE id = %d",
$order_quantity,
$supplier_id
));
}
}
?>
生产进度跟踪模块
4.1 进度状态管理与通知
<?php
/**
* 生产进度跟踪器
*/
class FSC_Production_Tracker {
/**
* 更新生产状态
* @param int $order_id 订单ID
* @param string $status 新状态
* @param string $notes 备注
* @return bool 是否成功
*/
public function update_production_status($order_id, $status, $notes = '') {
global $wpdb;
$table_name = $wpdb->prefix . 'fsc_production_orders';
$status_log_table = $wpdb->prefix . 'fsc_status_logs';
$allowed_statuses = array('pending', 'assigned', 'in_production', 'quality_check', 'completed', 'delayed');
if (!in_array($status, $allowed_statuses)) {
return false;
}
$update_data = array('status' => $status);
// 如果是开始生产,记录开始时间
if ($status === 'in_production') {
$update_data['started_at'] = current_time('mysql');
}
// 如果是完成,记录完成时间
if ($status === 'completed') {
$update_data['completed_at'] = current_time('mysql');
// 减少供应商工作负载
$order = $wpdb->get_row($wpdb->prepare(
"SELECT assigned_to, quantity FROM $table_name WHERE id = %d",
$order_id
));
if ($order && $order->assigned_to) {
$wpdb->query($wpdb->prepare(
"UPDATE {$wpdb->prefix}fsc_suppliers
SET current_workload = GREATEST(0, current_workload - %d)
WHERE id = %d",
$order->quantity,
$order->assigned_to
));
}
}
// 更新订单状态
$result = $wpdb->update(
$table_name,
$update_data,
array('id' => $order_id),
array('%s', '%s'),
array('%d')
);
// 记录状态变更日志
if ($result) {
$wpdb->insert(
$status_log_table,
array(
'order_id' => $order_id,
'old_status' => $this->get_current_status($order_id),
'new_status' => $status,
'notes' => $notes,
'changed_by' => get_current_user_id(),
'changed_at' => current_time('mysql')
),
array('%d', '%s', '%s', '%s', '%d', '%s')
);
// 发送状态变更通知
$this->send_status_notification($order_id, $status);
}
return $result;
}
/**
* 获取订单进度时间线
*/
public function get_order_timeline($order_id) {
global $wpdb;
$log_table = $wpdb->prefix . 'fsc_status_logs';
return $wpdb->get_results($wpdb->prepare(
"SELECT * FROM $log_table
WHERE order_id = %d
ORDER BY changed_at DESC",
$order_id
));
}
}
?>
前端界面与短代码集成
5.1 供应商前端展示与客户进度查询
<?php
/**
* 前端短代码处理器
*/
class FSC_Shortcodes {
/**
* 注册所有短代码
*/
public function register_shortcodes() {
add_shortcode('fsc_supplier_dashboard', array($this, 'render_supplier_dashboard'));
add_shortcode('fsc_order_tracking', array($this, 'render_order_tracking'));
add_shortcode('fsc_supplier_list', array($this, 'render_supplier_list'));
}
/**
* 供应商仪表盘短代码
*/
public function render_supplier_dashboard($atts) {
// 验证供应商权限
if (!is_user_logged_in() || !$this->is_supplier_user()) {
return '<p>请以供应商账号登录</p>';
}
$supplier_id = $this->get_current_supplier_id();
ob_start();
?>
<div class="fsc-supplier-dashboard">
<h2>供应商工作台</h2>
<div class="dashboard-stats">
<?php
$stats = $this->get_supplier_stats($supplier_id);
?>
<div class="stat-card">
<h3>当前工作量</h3>
<p class="stat-value"><?php echo $stats['current_workload']; ?> / <?php echo $stats['capacity']; ?></p>
</div>
<div class="stat-card">
<h3>进行中订单</h3>
<p class="stat-value"><?php echo $stats['active_orders']; ?></p>
</div>
</div>
<div class="assigned-orders">
<h3>分配给我的订单</h3>
<?php echo $this->render_supplier_orders($supplier_id); ?>
</div>
</div>
<style>
.fsc-supplier-dashboard {
max-width: 1200px;
margin: 0 auto;
padding: 20px;
}
.dashboard-stats {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 20px;
margin-bottom: 30px;
}
.stat-card {
background: #f8f9fa;
border-radius: 8px;
padding: 20px;
text-align: center;
border-left: 4px solid #007cba;
}
.stat-value {
font-size: 24px;
font-weight: bold;
color: #007cba;
margin: 10px 0 0;
}
</style>
<?php
return ob_get_clean();
}
/**
* 订单跟踪短代码
*/
public function render_order_tracking($atts) {
$atts = shortcode_atts(array(
'order_id' => 0
), $atts);
ob_start();
?>
<div class="fsc-order-tracking">
<h3>生产进度查询</h3>
<form method="get" class="tracking-form">
<input type="text" name="fsc_tracking_number"
placeholder="输入订单号或WooCommerce订单号"
value="<?php echo esc_attr($_GET['fsc_tracking_number'] ?? ''); ?>">
<button type="submit">查询</button>
</form>
<?php
if (isset($_GET['fsc_tracking_number']) && !empty($_GET['fsc_tracking_number'])) {
$this->display_tracking_results($_GET['fsc_tracking_number']);
}
?>
</div>
<?php
return ob_get_clean();
}
}
插件与WooCommerce集成
6.1 WooCommerce订单自动转换
<?php
/**
* WooCommerce集成处理器
*/
class FSC_WooCommerce_Integration {
/**
* 初始化WooCommerce钩子
*/
public function init_hooks() {
// 订单状态变更时触发生产订单创建
add_action('woocommerce_order_status_processing', array($this, 'create_production_order'), 10, 2);
// 在订单详情页显示生产进度
add_action('woocommerce_order_details_after_order_table', array($this, 'display_production_status'), 10, 1);
// 添加自定义订单状态
add_filter('woocommerce_register_shop_order_post_statuses', array($this, 'register_custom_order_statuses'));
add_filter('wc_order_statuses', array($this, 'add_custom_order_statuses'));
}
/**
* 创建生产订单
* @param int $order_id WooCommerce订单ID
* @param WC_Order $order 订单对象
*/
public function create_production_order($order_id, $order) {
global $wpdb;
// 检查是否已创建生产订单
$existing = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM {$wpdb->prefix}fsc_production_orders
WHERE woo_order_id = %d",
$order_id
));
if ($existing > 0) {
return;
}
// 获取订单中的定制产品
$items = $order->get_items();
$production_orders = array();
foreach ($items as $item) {
$product = $item->get_product();
// 检查是否为定制产品
if ($this->is_custom_product($product->get_id())) {
$custom_specs = $this->extract_custom_specifications($item);
$production_orders[] = array(
'woo_order_id' => $order_id,
'product_id' => $product->get_id(),
'custom_specs' => json_encode($custom_specs, JSON_UNESCAPED_UNICODE),
'quantity' => $item->get_quantity(),
'priority' => $this->calculate_priority($order),
'deadline' => $this->calculate_deadline($order),
'status' => 'pending'
);
}
}
// 批量插入生产订单
if (!empty($production_orders)) {
foreach ($production_orders as $production_order) {
$wpdb->insert(
"{$wpdb->prefix}fsc_production_orders",
$production_order,
array('%d', '%d', '%s', '%d', '%d', '%s', '%s')
);
// 触发自动分配
$allocator = new FSC_Order_Allocator();
$allocator->allocate_order($wpdb->insert_id);
}
// 更新WooCommerce订单状态
$order->update_status('fsc-in-production', __('订单已进入生产流程', 'fsc'));
}
}
/**
* 提取产品定制规格
*/
private function extract_custom_specifications($order_item) {
$specs = array();
// 从订单项元数据中获取定制信息
$meta_data = $order_item->get_meta_data();
foreach ($meta_data as $meta) {
$data = $meta->get_data();
if (strpos($data['key'], 'custom_') === 0) {
$specs[str_replace('custom_', '', $data['key'])] = $data['value'];
}
}
// 添加默认规格
$specs['order_item_id'] = $order_item->get_id();
$specs['production_type'] = $this->determine_production_type($specs);
return $specs;
}
/**
* 在订单详情页显示生产状态
*/
public function display_production_status($order) {
global $wpdb;
$order_id = $order->get_id();
$production_orders = $wpdb->get_results($wpdb->prepare(
"SELECT po.*, s.name as supplier_name
FROM {$wpdb->prefix}fsc_production_orders po
LEFT JOIN {$wpdb->prefix}fsc_suppliers s ON po.assigned_to = s.id
WHERE po.woo_order_id = %d",
$order_id
));
if (empty($production_orders)) {
return;
}
echo '<section class="fsc-production-status">';
echo '<h2>' . __('生产进度', 'fsc') . '</h2>';
foreach ($production_orders as $production_order) {
$this->render_production_order_status($production_order);
}
echo '</section>';
// 添加CSS样式
$this->add_status_styles();
}
/**
* 渲染单个生产订单状态
*/
private function render_production_order_status($production_order) {
$status_labels = array(
'pending' => __('等待分配', 'fsc'),
'assigned' => __('已分配供应商', 'fsc'),
'in_production' => __('生产中', 'fsc'),
'quality_check' => __('质检中', 'fsc'),
'completed' => __('已完成', 'fsc'),
'delayed' => __('已延迟', 'fsc')
);
$status_class = 'status-' . $production_order->status;
$status_text = $status_labels[$production_order->status] ?? $production_order->status;
echo '<div class="production-order-status ' . esc_attr($status_class) . '">';
echo '<h3>' . sprintf(__('生产订单 #%d', 'fsc'), $production_order->id) . '</h3>';
echo '<div class="status-info">';
echo '<span class="status-label">' . esc_html($status_text) . '</span>';
if ($production_order->supplier_name) {
echo '<span class="supplier-info">' .
sprintf(__('供应商: %s', 'fsc'), esc_html($production_order->supplier_name)) .
'</span>';
}
if ($production_order->started_at) {
echo '<span class="start-date">' .
sprintf(__('开始时间: %s', 'fsc'), date('Y-m-d', strtotime($production_order->started_at))) .
'</span>';
}
echo '</div>';
// 显示进度时间线
$this->render_progress_timeline($production_order->id);
echo '</div>';
}
}
?>
数据分析与报表系统
7.1 供应链性能监控
<?php
/**
* 数据分析与报表生成器
*/
class FSC_Analytics_Engine {
/**
* 生成供应商绩效报告
*/
public function generate_supplier_performance_report($start_date, $end_date) {
global $wpdb;
$report = array(
'summary' => array(),
'suppliers' => array(),
'metrics' => array()
);
// 获取时间段内的订单数据
$orders = $wpdb->get_results($wpdb->prepare(
"SELECT po.*, s.name as supplier_name
FROM {$wpdb->prefix}fsc_production_orders po
JOIN {$wpdb->prefix}fsc_suppliers s ON po.assigned_to = s.id
WHERE po.created_at BETWEEN %s AND %s
AND po.status = 'completed'",
$start_date,
$end_date
));
// 计算总体指标
$total_orders = count($orders);
$total_quantity = array_sum(array_column($orders, 'quantity'));
// 按供应商分组计算
$supplier_stats = array();
foreach ($orders as $order) {
$supplier_id = $order->assigned_to;
if (!isset($supplier_stats[$supplier_id])) {
$supplier_stats[$supplier_id] = array(
'name' => $order->supplier_name,
'order_count' => 0,
'total_quantity' => 0,
'total_delay' => 0,
'completion_times' => array()
);
}
$supplier_stats[$supplier_id]['order_count']++;
$supplier_stats[$supplier_id]['total_quantity'] += $order->quantity;
// 计算延迟天数
if ($order->completed_at && $order->deadline) {
$completion_date = new DateTime($order->completed_at);
$deadline_date = new DateTime($order->deadline);
if ($completion_date > $deadline_date) {
$delay_days = $completion_date->diff($deadline_date)->days;
$supplier_stats[$supplier_id]['total_delay'] += $delay_days;
}
// 计算生产周期
if ($order->started_at) {
$start_date = new DateTime($order->started_at);
$production_days = $completion_date->diff($start_date)->days;
$supplier_stats[$supplier_id]['completion_times'][] = $production_days;
}
}
}
// 计算每个供应商的平均指标
foreach ($supplier_stats as $supplier_id => &$stats) {
$stats['avg_delay'] = $stats['order_count'] > 0 ?
$stats['total_delay'] / $stats['order_count'] : 0;
$stats['avg_completion_time'] = !empty($stats['completion_times']) ?
array_sum($stats['completion_times']) / count($stats['completion_times']) : 0;
$stats['efficiency_score'] = $this->calculate_efficiency_score($stats);
}
$report['summary'] = array(
'total_orders' => $total_orders,
'total_quantity' => $total_quantity,
'supplier_count' => count($supplier_stats),
'period' => array('start' => $start_date, 'end' => $end_date)
);
$report['suppliers'] = $supplier_stats;
return $report;
}
/**
* 计算供应商效率得分
*/
private function calculate_efficiency_score($stats) {
$weights = array(
'avg_delay' => -0.3, // 延迟扣分
'avg_completion_time' => -0.2, // 生产时间长扣分
'order_count' => 0.3, // 订单数量加分
'quantity' => 0.2 // 生产数量加分
);
// 标准化各项指标(0-10分)
$max_orders = max(array_column($this->get_all_supplier_stats(), 'order_count'));
$order_score = $max_orders > 0 ? ($stats['order_count'] / $max_orders) * 10 : 0;
$max_quantity = max(array_column($this->get_all_supplier_stats(), 'total_quantity'));
$quantity_score = $max_quantity > 0 ? ($stats['total_quantity'] / $max_quantity) * 10 : 0;
// 延迟得分(延迟越少得分越高)
$delay_score = max(0, 10 - min($stats['avg_delay'], 10));
// 生产时间得分(时间越短得分越高)
$completion_score = max(0, 10 - min($stats['avg_completion_time'] / 2, 10));
// 计算综合得分
$total_score =
$delay_score * $weights['avg_delay'] +
$completion_score * $weights['avg_completion_time'] +
$order_score * $weights['order_count'] +
$quantity_score * $weights['quantity'];
return round(max(0, min(100, $total_score * 10)), 2);
}
/**
* 生成产能利用率图表数据
*/
public function generate_capacity_utilization_data($period = 'monthly') {
global $wpdb;
$data = array();
switch ($period) {
case 'daily':
$date_format = '%Y-%m-%d';
$interval = '7 DAY';
break;
case 'weekly':
$date_format = '%Y-%u';
$interval = '8 WEEK';
break;
default: // monthly
$date_format = '%Y-%m';
$interval = '6 MONTH';
}
// 获取供应商产能数据
$capacity_data = $wpdb->get_results(
"SELECT s.id, s.name, s.capacity,
DATE_FORMAT(po.created_at, '{$date_format}') as period,
SUM(po.quantity) as total_quantity
FROM {$wpdb->prefix}fsc_suppliers s
LEFT JOIN {$wpdb->prefix}fsc_production_orders po
ON s.id = po.assigned_to
AND po.created_at >= DATE_SUB(NOW(), INTERVAL {$interval})
WHERE s.is_active = 1
GROUP BY s.id, period
ORDER BY period, s.name"
);
// 格式化数据供图表使用
$periods = array();
$suppliers = array();
foreach ($capacity_data as $row) {
if (!in_array($row->period, $periods)) {
$periods[] = $row->period;
}
if (!isset($suppliers[$row->id])) {
$suppliers[$row->id] = array(
'name' => $row->name,
'capacity' => $row->capacity,
'data' => array()
);
}
$utilization = $row->capacity > 0 ?
min(100, ($row->total_quantity / $row->capacity) * 100) : 0;
$suppliers[$row->id]['data'][$row->period] = round($utilization, 2);
}
// 填充缺失的周期数据
foreach ($suppliers as &$supplier) {
foreach ($periods as $period) {
if (!isset($supplier['data'][$period])) {
$supplier['data'][$period] = 0;
}
}
ksort($supplier['data']);
}
return array(
'periods' => $periods,
'suppliers' => $suppliers,
'type' => 'capacity_utilization'
);
}
}
?>
插件管理后台界面
8.1 综合管理仪表盘
<?php
/**
* 插件管理后台
*/
class FSC_Admin_Dashboard {
/**
* 初始化管理菜单
*/
public function init_admin_menu() {
add_menu_page(
__('柔性供应链', 'fsc'),
__('柔性供应链', 'fsc'),
'manage_options',
'fsc-dashboard',
array($this, 'render_dashboard'),
'dashicons-networking',
30
);
add_submenu_page(
'fsc-dashboard',
__('供应商管理', 'fsc'),
__('供应商管理', 'fsc'),
'manage_options',
'fsc-suppliers',
array($this, 'render_suppliers_page')
);
add_submenu_page(
'fsc-dashboard',
__('生产订单', 'fsc'),
__('生产订单', 'fsc'),
'manage_options',
'fsc-production-orders',
array($this, 'render_orders_page')
);
add_submenu_page(
'fsc-dashboard',
__('数据分析', 'fsc'),
__('数据分析', 'fsc'),
'manage_options',
'fsc-analytics',
array($this, 'render_analytics_page')
);
add_submenu_page(
'fsc-dashboard',
__('系统设置', 'fsc'),
__('系统设置', 'fsc'),
'manage_options',
'fsc-settings',
array($this, 'render_settings_page')
);
}
/**
* 渲染主仪表盘
*/
public function render_dashboard() {
global $wpdb;
// 获取实时统计数据
$stats = array(
'total_suppliers' => $wpdb->get_var("SELECT COUNT(*) FROM {$wpdb->prefix}fsc_suppliers WHERE is_active = 1"),
'active_orders' => $wpdb->get_var("SELECT COUNT(*) FROM {$wpdb->prefix}fsc_production_orders WHERE status NOT IN ('completed', 'cancelled')"),
'pending_allocation' => $wpdb->get_var("SELECT COUNT(*) FROM {$wpdb->prefix}fsc_production_orders WHERE status = 'pending'"),
'today_completed' => $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM {$wpdb->prefix}fsc_production_orders
WHERE DATE(completed_at) = %s",
date('Y-m-d')
))
);
// 获取最近订单
$recent_orders = $wpdb->get_results(
"SELECT po.*, s.name as supplier_name, p.post_title as product_name
FROM {$wpdb->prefix}fsc_production_orders po
LEFT JOIN {$wpdb->prefix}fsc_suppliers s ON po.assigned_to = s.id
LEFT JOIN {$wpdb->posts} p ON po.product_id = p.ID
ORDER BY po.created_at DESC
LIMIT 10"
);
?>
<div class="wrap fsc-admin-dashboard">
<h1><?php _e('柔性供应链管理', 'fsc'); ?></h1>
<div class="dashboard-widgets">
<!-- 统计卡片 -->
<div class="stats-grid">
<?php foreach ($stats as $key => $value): ?>
