464 lines
20 KiB
MySQL
464 lines
20 KiB
MySQL
|
|
-- iloom Business Tables for muyu_wms Database
|
||
|
|
-- All tables use ilm_ prefix to coexist with muyu-apiserver tables
|
||
|
|
-- This script should be run AFTER muyu's init.sql
|
||
|
|
|
||
|
|
USE `muyu_wms`;
|
||
|
|
|
||
|
|
-- ==================== iloom Roles & Permissions ====================
|
||
|
|
|
||
|
|
INSERT IGNORE INTO `sys_role` (`role_id`, `role_name`, `role_key`, `role_desc`, `sort_order`, `status`) VALUES
|
||
|
|
('r_010', '采购商', 'purchaser', 'iloom purchaser role', 10, 1),
|
||
|
|
('r_011', '纺织厂', 'textile', 'iloom textile factory role', 11, 1),
|
||
|
|
('r_012', '水洗厂', 'washing', 'iloom washing factory role', 12, 1);
|
||
|
|
|
||
|
|
INSERT IGNORE INTO `casbin_rule` (`ptype`, `v0`, `v1`, `v2`) VALUES
|
||
|
|
('p', 'purchaser', '/api/v1/purchaser/*', '*'),
|
||
|
|
('p', 'purchaser', '/api/v1/common/*', '*'),
|
||
|
|
('p', 'purchaser', '/api/v1/auth/*', '*'),
|
||
|
|
('p', 'textile', '/api/v1/textile/*', '*'),
|
||
|
|
('p', 'textile', '/api/v1/common/*', '*'),
|
||
|
|
('p', 'textile', '/api/v1/auth/*', '*'),
|
||
|
|
('p', 'washing', '/api/v1/washing/*', '*'),
|
||
|
|
('p', 'washing', '/api/v1/common/*', '*'),
|
||
|
|
('p', 'washing', '/api/v1/auth/*', '*');
|
||
|
|
|
||
|
|
-- ==================== Company & Multi-tenancy ====================
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS `ilm_company` (
|
||
|
|
`id` VARCHAR(36) NOT NULL,
|
||
|
|
`name` VARCHAR(100) NOT NULL,
|
||
|
|
`type` VARCHAR(20) NOT NULL DEFAULT '' COMMENT 'purchaser|textile|washing',
|
||
|
|
`address` VARCHAR(255) NOT NULL DEFAULT '',
|
||
|
|
`phone` VARCHAR(20) NOT NULL DEFAULT '',
|
||
|
|
`contact_person` VARCHAR(50) NOT NULL DEFAULT '',
|
||
|
|
`status` TINYINT NOT NULL DEFAULT 1,
|
||
|
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
|
|
PRIMARY KEY (`id`),
|
||
|
|
KEY `idx_type` (`type`)
|
||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS `ilm_company_member` (
|
||
|
|
`id` VARCHAR(36) NOT NULL,
|
||
|
|
`company_id` VARCHAR(36) NOT NULL,
|
||
|
|
`user_id` VARCHAR(32) NOT NULL,
|
||
|
|
`role` VARCHAR(20) NOT NULL DEFAULT 'member' COMMENT 'owner|admin|member',
|
||
|
|
`is_master` TINYINT NOT NULL DEFAULT 0,
|
||
|
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
PRIMARY KEY (`id`),
|
||
|
|
UNIQUE KEY `uk_company_user` (`company_id`, `user_id`),
|
||
|
|
KEY `idx_user_id` (`user_id`)
|
||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS `ilm_company_relationship` (
|
||
|
|
`id` VARCHAR(36) NOT NULL,
|
||
|
|
`from_company_id` VARCHAR(36) NOT NULL,
|
||
|
|
`to_company_id` VARCHAR(36) NOT NULL,
|
||
|
|
`relationship_type` VARCHAR(20) NOT NULL DEFAULT '' COMMENT 'supplier|customer|partner',
|
||
|
|
`status` VARCHAR(20) NOT NULL DEFAULT 'active',
|
||
|
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
PRIMARY KEY (`id`),
|
||
|
|
UNIQUE KEY `uk_relationship` (`from_company_id`, `to_company_id`, `relationship_type`),
|
||
|
|
KEY `idx_to_company` (`to_company_id`)
|
||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
-- ==================== Product Extension ====================
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS `ilm_product_ext` (
|
||
|
|
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
||
|
|
`product_id` VARCHAR(32) NOT NULL,
|
||
|
|
`company_id` VARCHAR(36) NOT NULL,
|
||
|
|
`fabric_code` VARCHAR(50) NOT NULL DEFAULT '',
|
||
|
|
`color_code` VARCHAR(50) NOT NULL DEFAULT '',
|
||
|
|
`yarn_usage_per_meter` DECIMAL(10,4) DEFAULT NULL,
|
||
|
|
`current_price` DECIMAL(10,2) DEFAULT NULL,
|
||
|
|
`warp_weight` DECIMAL(10,2) DEFAULT NULL,
|
||
|
|
`weft_weight` DECIMAL(10,2) DEFAULT NULL,
|
||
|
|
`total_weight` DECIMAL(10,2) DEFAULT NULL,
|
||
|
|
`stock_meters` DECIMAL(12,2) NOT NULL DEFAULT 0.00,
|
||
|
|
`stock_rolls` INT NOT NULL DEFAULT 0,
|
||
|
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
|
|
PRIMARY KEY (`id`),
|
||
|
|
UNIQUE KEY `uk_product_company` (`product_id`, `company_id`),
|
||
|
|
KEY `idx_company` (`company_id`)
|
||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
-- ==================== Production Plans ====================
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS `ilm_production_plan` (
|
||
|
|
`id` VARCHAR(36) NOT NULL,
|
||
|
|
`plan_code` VARCHAR(50) NOT NULL,
|
||
|
|
`purchaser_id` VARCHAR(36) NOT NULL COMMENT 'company_id of purchaser',
|
||
|
|
`product_name` VARCHAR(100) NOT NULL DEFAULT '',
|
||
|
|
`fabric_code` VARCHAR(50) NOT NULL DEFAULT '',
|
||
|
|
`color` VARCHAR(50) NOT NULL DEFAULT '',
|
||
|
|
`color_code` VARCHAR(50) NOT NULL DEFAULT '',
|
||
|
|
`target_quantity` DECIMAL(12,2) NOT NULL DEFAULT 0.00,
|
||
|
|
`completed_quantity` DECIMAL(12,2) NOT NULL DEFAULT 0.00,
|
||
|
|
`production_price` DECIMAL(10,2) DEFAULT NULL,
|
||
|
|
`yarn_usage_per_meter` DECIMAL(10,4) DEFAULT NULL,
|
||
|
|
`status` VARCHAR(20) NOT NULL DEFAULT 'draft' COMMENT 'draft|producing|completed|cancelled',
|
||
|
|
`remark` TEXT,
|
||
|
|
`start_time` DATETIME DEFAULT NULL,
|
||
|
|
`created_by` VARCHAR(32) NOT NULL DEFAULT '',
|
||
|
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
|
|
PRIMARY KEY (`id`),
|
||
|
|
UNIQUE KEY `uk_plan_code` (`plan_code`),
|
||
|
|
KEY `idx_purchaser` (`purchaser_id`),
|
||
|
|
KEY `idx_status` (`status`)
|
||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS `ilm_plan_factory` (
|
||
|
|
`id` VARCHAR(36) NOT NULL,
|
||
|
|
`plan_id` VARCHAR(36) NOT NULL,
|
||
|
|
`factory_id` VARCHAR(36) NOT NULL,
|
||
|
|
`factory_type` VARCHAR(20) NOT NULL DEFAULT '' COMMENT 'textile|washing',
|
||
|
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
PRIMARY KEY (`id`),
|
||
|
|
KEY `idx_plan` (`plan_id`),
|
||
|
|
KEY `idx_factory` (`factory_id`)
|
||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS `ilm_yarn_ratio` (
|
||
|
|
`id` VARCHAR(36) NOT NULL,
|
||
|
|
`plan_id` VARCHAR(36) NOT NULL,
|
||
|
|
`yarn_name` VARCHAR(100) NOT NULL DEFAULT '',
|
||
|
|
`yarn_type` VARCHAR(50) NOT NULL DEFAULT '',
|
||
|
|
`ratio` DECIMAL(5,2) NOT NULL DEFAULT 0.00,
|
||
|
|
`amount_per_meter` DECIMAL(10,4) DEFAULT NULL,
|
||
|
|
`total_amount` DECIMAL(12,2) DEFAULT NULL,
|
||
|
|
`company_id` VARCHAR(36) NOT NULL DEFAULT '',
|
||
|
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
PRIMARY KEY (`id`),
|
||
|
|
KEY `idx_plan` (`plan_id`)
|
||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
-- ==================== Production Process ====================
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS `ilm_process_step` (
|
||
|
|
`id` VARCHAR(36) NOT NULL,
|
||
|
|
`plan_id` VARCHAR(36) NOT NULL,
|
||
|
|
`step_type` VARCHAR(30) NOT NULL DEFAULT '' COMMENT 'warping|sizing|weaving|inspection|finishing',
|
||
|
|
`status` VARCHAR(20) NOT NULL DEFAULT 'pending' COMMENT 'pending|in_progress|completed|rejected',
|
||
|
|
`notes` TEXT,
|
||
|
|
`operator_id` VARCHAR(32) NOT NULL DEFAULT '',
|
||
|
|
`company_id` VARCHAR(36) NOT NULL DEFAULT '',
|
||
|
|
`timestamp` DATETIME DEFAULT NULL,
|
||
|
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
PRIMARY KEY (`id`),
|
||
|
|
KEY `idx_plan` (`plan_id`),
|
||
|
|
KEY `idx_status` (`status`)
|
||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
-- ==================== Warehousing ====================
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS `ilm_warehouse` (
|
||
|
|
`id` VARCHAR(36) NOT NULL,
|
||
|
|
`name` VARCHAR(100) NOT NULL,
|
||
|
|
`location` VARCHAR(255) NOT NULL DEFAULT '',
|
||
|
|
`company_id` VARCHAR(36) NOT NULL,
|
||
|
|
`capacity` DECIMAL(12,2) DEFAULT NULL,
|
||
|
|
`status` TINYINT NOT NULL DEFAULT 1,
|
||
|
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
|
|
PRIMARY KEY (`id`),
|
||
|
|
KEY `idx_company` (`company_id`)
|
||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS `ilm_inventory_record` (
|
||
|
|
`id` VARCHAR(36) NOT NULL,
|
||
|
|
`plan_id` VARCHAR(36) NOT NULL DEFAULT '',
|
||
|
|
`warehouse_id` VARCHAR(36) NOT NULL DEFAULT '',
|
||
|
|
`quantity` DECIMAL(12,2) NOT NULL DEFAULT 0.00,
|
||
|
|
`rolls` INT DEFAULT NULL,
|
||
|
|
`price_per_meter` DECIMAL(10,2) DEFAULT NULL,
|
||
|
|
`price_note` TEXT,
|
||
|
|
`warehouse_location` VARCHAR(100) NOT NULL DEFAULT '',
|
||
|
|
`operator_id` VARCHAR(32) NOT NULL DEFAULT '',
|
||
|
|
`company_id` VARCHAR(36) NOT NULL DEFAULT '',
|
||
|
|
`record_type` VARCHAR(20) NOT NULL DEFAULT 'inbound' COMMENT 'inbound|outbound',
|
||
|
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
PRIMARY KEY (`id`),
|
||
|
|
KEY `idx_plan` (`plan_id`),
|
||
|
|
KEY `idx_company` (`company_id`)
|
||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
-- ==================== Product Inventory (Purchaser) ====================
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS `ilm_product_inventory` (
|
||
|
|
`id` VARCHAR(36) NOT NULL,
|
||
|
|
`product_id` VARCHAR(32) NOT NULL DEFAULT '',
|
||
|
|
`batch_no` VARCHAR(50) NOT NULL DEFAULT '',
|
||
|
|
`rolls` INT NOT NULL DEFAULT 0,
|
||
|
|
`meters` DECIMAL(12,2) NOT NULL DEFAULT 0.00,
|
||
|
|
`record_type` VARCHAR(20) NOT NULL DEFAULT 'inbound' COMMENT 'inbound|outbound',
|
||
|
|
`notes` TEXT,
|
||
|
|
`warehouse_id` VARCHAR(36) NOT NULL DEFAULT '',
|
||
|
|
`plan_code` VARCHAR(50) NOT NULL DEFAULT '',
|
||
|
|
`factory_id` VARCHAR(36) NOT NULL DEFAULT '',
|
||
|
|
`source` VARCHAR(20) NOT NULL DEFAULT '' COMMENT 'self|textile',
|
||
|
|
`price_per_meter` DECIMAL(10,2) DEFAULT NULL,
|
||
|
|
`operator_id` VARCHAR(32) NOT NULL DEFAULT '',
|
||
|
|
`company_id` VARCHAR(36) NOT NULL DEFAULT '',
|
||
|
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
PRIMARY KEY (`id`),
|
||
|
|
KEY `idx_product` (`product_id`),
|
||
|
|
KEY `idx_company` (`company_id`)
|
||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS `ilm_product_outbound` (
|
||
|
|
`id` VARCHAR(36) NOT NULL,
|
||
|
|
`product_id` VARCHAR(32) NOT NULL DEFAULT '',
|
||
|
|
`batch_no` VARCHAR(50) NOT NULL DEFAULT '',
|
||
|
|
`rolls` INT NOT NULL DEFAULT 0,
|
||
|
|
`meters` DECIMAL(12,2) NOT NULL DEFAULT 0.00,
|
||
|
|
`outbound_type` VARCHAR(20) NOT NULL DEFAULT '' COMMENT 'sale|washing|transfer',
|
||
|
|
`notes` TEXT,
|
||
|
|
`washing_plan_id` VARCHAR(36) NOT NULL DEFAULT '',
|
||
|
|
`recipient_company_id` VARCHAR(36) NOT NULL DEFAULT '',
|
||
|
|
`operator_id` VARCHAR(32) NOT NULL DEFAULT '',
|
||
|
|
`company_id` VARCHAR(36) NOT NULL DEFAULT '',
|
||
|
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
PRIMARY KEY (`id`),
|
||
|
|
KEY `idx_product` (`product_id`),
|
||
|
|
KEY `idx_company` (`company_id`)
|
||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
-- ==================== Price History ====================
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS `ilm_product_price_history` (
|
||
|
|
`id` VARCHAR(36) NOT NULL,
|
||
|
|
`product_id` VARCHAR(32) NOT NULL DEFAULT '',
|
||
|
|
`price` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
|
||
|
|
`reason` TEXT,
|
||
|
|
`changed_by` VARCHAR(32) NOT NULL DEFAULT '',
|
||
|
|
`company_id` VARCHAR(36) NOT NULL DEFAULT '',
|
||
|
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
PRIMARY KEY (`id`),
|
||
|
|
KEY `idx_product` (`product_id`)
|
||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS `ilm_production_price_history` (
|
||
|
|
`id` VARCHAR(36) NOT NULL,
|
||
|
|
`plan_id` VARCHAR(36) NOT NULL DEFAULT '',
|
||
|
|
`price` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
|
||
|
|
`reason` TEXT,
|
||
|
|
`changed_by` VARCHAR(32) NOT NULL DEFAULT '',
|
||
|
|
`company_id` VARCHAR(36) NOT NULL DEFAULT '',
|
||
|
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
PRIMARY KEY (`id`),
|
||
|
|
KEY `idx_plan` (`plan_id`)
|
||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
-- ==================== Accounts Payable ====================
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS `ilm_accounts_payable` (
|
||
|
|
`id` VARCHAR(36) NOT NULL,
|
||
|
|
`purchaser_id` VARCHAR(36) NOT NULL,
|
||
|
|
`factory_id` VARCHAR(36) NOT NULL,
|
||
|
|
`factory_type` VARCHAR(20) NOT NULL DEFAULT '',
|
||
|
|
`total_amount` DECIMAL(12,2) NOT NULL DEFAULT 0.00,
|
||
|
|
`paid_amount` DECIMAL(12,2) NOT NULL DEFAULT 0.00,
|
||
|
|
`status` VARCHAR(20) NOT NULL DEFAULT 'pending' COMMENT 'pending|partial|paid',
|
||
|
|
`notes` TEXT,
|
||
|
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
|
|
PRIMARY KEY (`id`),
|
||
|
|
KEY `idx_purchaser` (`purchaser_id`),
|
||
|
|
KEY `idx_factory` (`factory_id`)
|
||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS `ilm_ap_item` (
|
||
|
|
`id` VARCHAR(36) NOT NULL,
|
||
|
|
`payable_id` VARCHAR(36) NOT NULL,
|
||
|
|
`plan_id` VARCHAR(36) NOT NULL DEFAULT '',
|
||
|
|
`amount` DECIMAL(12,2) NOT NULL DEFAULT 0.00,
|
||
|
|
`description` TEXT,
|
||
|
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
PRIMARY KEY (`id`),
|
||
|
|
KEY `idx_payable` (`payable_id`)
|
||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
-- ==================== Washing Plans ====================
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS `ilm_washing_plan` (
|
||
|
|
`id` VARCHAR(36) NOT NULL,
|
||
|
|
`plan_code` VARCHAR(50) NOT NULL DEFAULT '',
|
||
|
|
`purchaser_id` VARCHAR(36) NOT NULL,
|
||
|
|
`washing_factory_id` VARCHAR(36) NOT NULL DEFAULT '',
|
||
|
|
`product_name` VARCHAR(100) NOT NULL DEFAULT '',
|
||
|
|
`fabric_code` VARCHAR(50) NOT NULL DEFAULT '',
|
||
|
|
`color` VARCHAR(50) NOT NULL DEFAULT '',
|
||
|
|
`quantity` DECIMAL(12,2) NOT NULL DEFAULT 0.00,
|
||
|
|
`unit_price` DECIMAL(10,2) DEFAULT NULL,
|
||
|
|
`status` VARCHAR(20) NOT NULL DEFAULT 'pending' COMMENT 'pending|accepted|processing|completed|rejected',
|
||
|
|
`notes` TEXT,
|
||
|
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
|
|
PRIMARY KEY (`id`),
|
||
|
|
KEY `idx_purchaser` (`purchaser_id`),
|
||
|
|
KEY `idx_washing_factory` (`washing_factory_id`),
|
||
|
|
KEY `idx_status` (`status`)
|
||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
-- ==================== Washing Process ====================
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS `ilm_washing_step` (
|
||
|
|
`id` VARCHAR(36) NOT NULL,
|
||
|
|
`washing_plan_id` VARCHAR(36) NOT NULL,
|
||
|
|
`step_type` VARCHAR(30) NOT NULL DEFAULT '',
|
||
|
|
`status` VARCHAR(20) NOT NULL DEFAULT 'pending',
|
||
|
|
`notes` TEXT,
|
||
|
|
`operator_id` VARCHAR(32) NOT NULL DEFAULT '',
|
||
|
|
`company_id` VARCHAR(36) NOT NULL DEFAULT '',
|
||
|
|
`timestamp` DATETIME DEFAULT NULL,
|
||
|
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
PRIMARY KEY (`id`),
|
||
|
|
KEY `idx_washing_plan` (`washing_plan_id`)
|
||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS `ilm_washing_completion` (
|
||
|
|
`id` VARCHAR(36) NOT NULL,
|
||
|
|
`washing_plan_id` VARCHAR(36) NOT NULL,
|
||
|
|
`completed_quantity` DECIMAL(12,2) NOT NULL DEFAULT 0.00,
|
||
|
|
`quality_notes` TEXT,
|
||
|
|
`operator_id` VARCHAR(32) NOT NULL DEFAULT '',
|
||
|
|
`company_id` VARCHAR(36) NOT NULL DEFAULT '',
|
||
|
|
`completed_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
PRIMARY KEY (`id`),
|
||
|
|
KEY `idx_washing_plan` (`washing_plan_id`)
|
||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
-- ==================== Finished Products ====================
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS `ilm_finished_product` (
|
||
|
|
`id` VARCHAR(36) NOT NULL,
|
||
|
|
`product_name` VARCHAR(100) NOT NULL DEFAULT '',
|
||
|
|
`fabric_code` VARCHAR(50) NOT NULL DEFAULT '',
|
||
|
|
`color` VARCHAR(50) NOT NULL DEFAULT '',
|
||
|
|
`stock_meters` DECIMAL(12,2) NOT NULL DEFAULT 0.00,
|
||
|
|
`stock_rolls` INT NOT NULL DEFAULT 0,
|
||
|
|
`company_id` VARCHAR(36) NOT NULL,
|
||
|
|
`washing_plan_id` VARCHAR(36) NOT NULL DEFAULT '',
|
||
|
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
|
|
PRIMARY KEY (`id`),
|
||
|
|
KEY `idx_company` (`company_id`)
|
||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS `ilm_finished_product_inventory` (
|
||
|
|
`id` VARCHAR(36) NOT NULL,
|
||
|
|
`finished_product_id` VARCHAR(36) NOT NULL,
|
||
|
|
`batch_no` VARCHAR(50) NOT NULL DEFAULT '',
|
||
|
|
`rolls` INT NOT NULL DEFAULT 0,
|
||
|
|
`meters` DECIMAL(12,2) NOT NULL DEFAULT 0.00,
|
||
|
|
`record_type` VARCHAR(20) NOT NULL DEFAULT 'inbound',
|
||
|
|
`notes` TEXT,
|
||
|
|
`operator_id` VARCHAR(32) NOT NULL DEFAULT '',
|
||
|
|
`company_id` VARCHAR(36) NOT NULL DEFAULT '',
|
||
|
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
PRIMARY KEY (`id`),
|
||
|
|
KEY `idx_finished_product` (`finished_product_id`),
|
||
|
|
KEY `idx_company` (`company_id`)
|
||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
-- ==================== Yarn Stock ====================
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS `ilm_yarn_stock` (
|
||
|
|
`id` VARCHAR(36) NOT NULL,
|
||
|
|
`yarn_name` VARCHAR(100) NOT NULL DEFAULT '',
|
||
|
|
`yarn_type` VARCHAR(50) NOT NULL DEFAULT '',
|
||
|
|
`current_stock` DECIMAL(12,2) NOT NULL DEFAULT 0.00,
|
||
|
|
`unit` VARCHAR(20) NOT NULL DEFAULT 'kg',
|
||
|
|
`company_id` VARCHAR(36) NOT NULL,
|
||
|
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
|
|
PRIMARY KEY (`id`),
|
||
|
|
KEY `idx_company` (`company_id`)
|
||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS `ilm_yarn_stock_record` (
|
||
|
|
`id` VARCHAR(36) NOT NULL,
|
||
|
|
`yarn_stock_id` VARCHAR(36) NOT NULL,
|
||
|
|
`quantity` DECIMAL(12,2) NOT NULL DEFAULT 0.00,
|
||
|
|
`record_type` VARCHAR(20) NOT NULL DEFAULT 'in' COMMENT 'in|out',
|
||
|
|
`notes` TEXT,
|
||
|
|
`operator_id` VARCHAR(32) NOT NULL DEFAULT '',
|
||
|
|
`company_id` VARCHAR(36) NOT NULL DEFAULT '',
|
||
|
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
PRIMARY KEY (`id`),
|
||
|
|
KEY `idx_yarn_stock` (`yarn_stock_id`)
|
||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
-- ==================== Payments ====================
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS `ilm_payment` (
|
||
|
|
`id` VARCHAR(36) NOT NULL,
|
||
|
|
`payer_company_id` VARCHAR(36) NOT NULL,
|
||
|
|
`payee_company_id` VARCHAR(36) NOT NULL,
|
||
|
|
`amount` DECIMAL(12,2) NOT NULL DEFAULT 0.00,
|
||
|
|
`payment_type` VARCHAR(20) NOT NULL DEFAULT '' COMMENT 'production|washing',
|
||
|
|
`plan_id` VARCHAR(36) NOT NULL DEFAULT '',
|
||
|
|
`status` VARCHAR(20) NOT NULL DEFAULT 'pending' COMMENT 'pending|confirmed|rejected',
|
||
|
|
`notes` TEXT,
|
||
|
|
`confirmed_at` DATETIME DEFAULT NULL,
|
||
|
|
`confirmed_by` VARCHAR(32) NOT NULL DEFAULT '',
|
||
|
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||
|
|
PRIMARY KEY (`id`),
|
||
|
|
KEY `idx_payer` (`payer_company_id`),
|
||
|
|
KEY `idx_payee` (`payee_company_id`),
|
||
|
|
KEY `idx_status` (`status`)
|
||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
-- ==================== Notifications & Misc ====================
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS `ilm_notification` (
|
||
|
|
`id` VARCHAR(36) NOT NULL,
|
||
|
|
`user_id` VARCHAR(32) NOT NULL,
|
||
|
|
`company_id` VARCHAR(36) NOT NULL DEFAULT '',
|
||
|
|
`title` VARCHAR(200) NOT NULL DEFAULT '',
|
||
|
|
`message` TEXT,
|
||
|
|
`type` VARCHAR(30) NOT NULL DEFAULT 'info' COMMENT 'info|warning|success|error',
|
||
|
|
`is_read` TINYINT NOT NULL DEFAULT 0,
|
||
|
|
`link` VARCHAR(255) NOT NULL DEFAULT '',
|
||
|
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
PRIMARY KEY (`id`),
|
||
|
|
KEY `idx_user_unread` (`user_id`, `is_read`),
|
||
|
|
KEY `idx_company` (`company_id`)
|
||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS `ilm_share_link` (
|
||
|
|
`id` VARCHAR(36) NOT NULL,
|
||
|
|
`code` VARCHAR(20) NOT NULL,
|
||
|
|
`company_id` VARCHAR(36) NOT NULL,
|
||
|
|
`created_by` VARCHAR(32) NOT NULL DEFAULT '',
|
||
|
|
`resource_type` VARCHAR(30) NOT NULL DEFAULT '',
|
||
|
|
`resource_id` VARCHAR(36) NOT NULL DEFAULT '',
|
||
|
|
`expires_at` DATETIME DEFAULT NULL,
|
||
|
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
PRIMARY KEY (`id`),
|
||
|
|
UNIQUE KEY `uk_code` (`code`),
|
||
|
|
KEY `idx_company` (`company_id`)
|
||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS `ilm_audit_log` (
|
||
|
|
`id` VARCHAR(36) NOT NULL,
|
||
|
|
`user_id` VARCHAR(32) NOT NULL DEFAULT '',
|
||
|
|
`company_id` VARCHAR(36) NOT NULL DEFAULT '',
|
||
|
|
`action` VARCHAR(50) NOT NULL DEFAULT '',
|
||
|
|
`resource_type` VARCHAR(50) NOT NULL DEFAULT '',
|
||
|
|
`resource_id` VARCHAR(36) NOT NULL DEFAULT '',
|
||
|
|
`old_value` JSON DEFAULT NULL,
|
||
|
|
`new_value` JSON DEFAULT NULL,
|
||
|
|
`ip` VARCHAR(50) NOT NULL DEFAULT '',
|
||
|
|
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
PRIMARY KEY (`id`),
|
||
|
|
KEY `idx_user` (`user_id`),
|
||
|
|
KEY `idx_company` (`company_id`),
|
||
|
|
KEY `idx_created_at` (`created_at`)
|
||
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|