-- 酷冰甲 CMS 升级脚本：新增 CRM（客户管理）与 PSI（进销存）模块
-- 用法：在远端 MySQL 执行本文件（phpMyAdmin / 命令行均可）。
-- 幂等，可重复执行；兼容 MySQL 5.7 与 8.0（5.7 不支持 ADD COLUMN IF NOT EXISTS，故用存储过程判断）。
SET NAMES utf8mb4;

/* ===================== CRM 客户管理系统 ===================== */
CREATE TABLE IF NOT EXISTS `crm_customers` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `name` VARCHAR(120) NOT NULL,
  `company` VARCHAR(160) DEFAULT '',
  `contact` VARCHAR(60) DEFAULT '',
  `phone` VARCHAR(40) DEFAULT '',
  `email` VARCHAR(120) DEFAULT '',
  `country` VARCHAR(60) DEFAULT '',
  `type` VARCHAR(20) DEFAULT 'trade',
  `source` VARCHAR(40) DEFAULT '',
  `level` VARCHAR(20) DEFAULT 'C',
  `remark` TEXT,
  `owner` VARCHAR(60) DEFAULT '',
  `created_at` VARCHAR(20) DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS `crm_leads` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `customer_id` INT DEFAULT 0,
  `title` VARCHAR(200) NOT NULL,
  `amount` DECIMAL(12,2) DEFAULT 0,
  `stage` VARCHAR(20) DEFAULT 'new',
  `expected_close` VARCHAR(20) DEFAULT '',
  `owner` VARCHAR(60) DEFAULT '',
  `remark` TEXT,
  `created_at` VARCHAR(20) DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS `crm_followups` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `customer_id` INT DEFAULT 0,
  `lead_id` INT DEFAULT 0,
  `content` TEXT,
  `next_at` VARCHAR(20) DEFAULT '',
  `owner` VARCHAR(60) DEFAULT '',
  `created_at` VARCHAR(20) DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

/* ===================== 进销存 PSI 系统 ===================== */
CREATE TABLE IF NOT EXISTS `psi_materials` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `code` VARCHAR(40) DEFAULT '',
  `name` VARCHAR(160) NOT NULL,
  `spec` VARCHAR(120) DEFAULT '',
  `unit` VARCHAR(10) DEFAULT '个',
  `category` VARCHAR(40) DEFAULT '',
  `stock` DECIMAL(12,2) DEFAULT 0,
  `price` DECIMAL(10,2) DEFAULT 0,
  `supplier_id` INT DEFAULT 0,
  `remark` TEXT,
  `created_at` VARCHAR(20) DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS `psi_products` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `code` VARCHAR(40) DEFAULT '',
  `name` VARCHAR(160) NOT NULL,
  `spec` VARCHAR(120) DEFAULT '',
  `unit` VARCHAR(10) DEFAULT '件',
  `category` VARCHAR(40) DEFAULT '',
  `stock` DECIMAL(12,2) DEFAULT 0,
  `cost` DECIMAL(10,2) DEFAULT 0,
  `price` DECIMAL(10,2) DEFAULT 0,
  `remark` TEXT,
  `created_at` VARCHAR(20) DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS `psi_suppliers` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `name` VARCHAR(160) NOT NULL,
  `contact` VARCHAR(60) DEFAULT '',
  `phone` VARCHAR(40) DEFAULT '',
  `country` VARCHAR(60) DEFAULT '',
  `remark` TEXT,
  `created_at` VARCHAR(20) DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS `psi_purchases` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `order_no` VARCHAR(40) NOT NULL,
  `supplier_id` INT DEFAULT 0,
  `item_type` VARCHAR(10) DEFAULT 'material',
  `item_id` INT DEFAULT 0,
  `qty` DECIMAL(12,2) DEFAULT 0,
  `price` DECIMAL(10,2) DEFAULT 0,
  `amount` DECIMAL(12,2) DEFAULT 0,
  `status` VARCHAR(20) DEFAULT 'pending',
  `remark` TEXT,
  `created_at` VARCHAR(20) DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS `psi_sales` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `order_no` VARCHAR(40) NOT NULL,
  `customer` VARCHAR(160) DEFAULT '',
  `channel` VARCHAR(20) DEFAULT 'domestic',
  `item_id` INT DEFAULT 0,
  `qty` DECIMAL(12,2) DEFAULT 0,
  `price` DECIMAL(10,2) DEFAULT 0,
  `amount` DECIMAL(12,2) DEFAULT 0,
  `status` VARCHAR(20) DEFAULT 'pending',
  `remark` TEXT,
  `created_at` VARCHAR(20) DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS `psi_stock_moves` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `item_type` VARCHAR(10) DEFAULT 'product',
  `item_id` INT DEFAULT 0,
  `direction` VARCHAR(10) DEFAULT 'in',
  `qty` DECIMAL(12,2) DEFAULT 0,
  `ref_no` VARCHAR(40) DEFAULT '',
  `remark` TEXT,
  `created_at` VARCHAR(20) DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

/* 为 admin_users 补齐分系统角色列（幂等，兼容 5.7） */
DROP PROCEDURE IF EXISTS `add_crm_psi_cols`;
DELIMITER $$
CREATE PROCEDURE `add_crm_psi_cols`()
BEGIN
  IF NOT EXISTS (SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='admin_users' AND COLUMN_NAME='crm_role') THEN
    ALTER TABLE `admin_users` ADD COLUMN `crm_role` VARCHAR(20) DEFAULT 'none';
  END IF;
  IF NOT EXISTS (SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='admin_users' AND COLUMN_NAME='psi_role') THEN
    ALTER TABLE `admin_users` ADD COLUMN `psi_role` VARCHAR(20) DEFAULT 'none';
  END IF;
END$$
DELIMITER ;
CALL `add_crm_psi_cols`();
DROP PROCEDURE IF EXISTS `add_crm_psi_cols`;

-- 升级完成后，登录后台 → 用户管理，将超级管理员/相关账号的 crm_role、psi_role 设为 admin。
