diff --git a/demo.sql b/demo.sql new file mode 100644 index 0000000..d9c27f4 --- /dev/null +++ b/demo.sql @@ -0,0 +1,665 @@ +/* + Navicat Premium Dump SQL + + Source Server : localhost + Source Server Type : MySQL + Source Server Version : 90100 (9.1.0) + Source Host : localhost:3306 + Source Schema : demo + + Target Server Type : MySQL + Target Server Version : 90100 (9.1.0) + File Encoding : 65001 + + Date: 29/12/2024 21:43:27 +*/ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for customer +-- ---------------------------- +DROP TABLE IF EXISTS `customer`; +CREATE TABLE `customer` ( + `CustomerID` int NOT NULL AUTO_INCREMENT, + `CustomerName` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `ContactNumber` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `Email` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, + `CustomerAddress` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + PRIMARY KEY (`CustomerID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 21 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of customer +-- ---------------------------- +INSERT INTO `customer` VALUES (1, '客户A', '13800000001', 'customerA@example.com', '北京市海淀区XX路XX号'); +INSERT INTO `customer` VALUES (2, '客户B', '13800000002', 'customerB@example.com', '上海市黄浦区XX路XX号'); +INSERT INTO `customer` VALUES (3, '客户C', '13800000003', 'customerC@example.com', '广州市越秀区XX路XX号'); +INSERT INTO `customer` VALUES (4, '客户D', '13800000004', 'customerD@example.com', '深圳市福田区XX路XX号'); +INSERT INTO `customer` VALUES (5, '客户E', '13800000005', 'customerE@example.com', '成都市锦江区XX路XX号'); +INSERT INTO `customer` VALUES (6, '客户F', '13800000006', 'customerF@example.com', '杭州市拱墅区XX路XX号'); +INSERT INTO `customer` VALUES (7, '客户G', '13800000007', 'customerG@example.com', '武汉市武昌区XX路XX号'); +INSERT INTO `customer` VALUES (8, '客户H', '13800000008', 'customerH@example.com', '南京市玄武区XX路XX号'); +INSERT INTO `customer` VALUES (9, '客户I', '13800000009', 'customerI@example.com', '西安市碑林区XX路XX号'); +INSERT INTO `customer` VALUES (10, '客户J', '13800000010', 'customerJ@example.com', '重庆市江北区XX路XX号'); +INSERT INTO `customer` VALUES (11, '客户A', '13800000001', 'customerA@example.com', '北京市海淀区XX路XX号'); +INSERT INTO `customer` VALUES (12, '客户B', '13800000002', 'customerB@example.com', '上海市黄浦区XX路XX号'); +INSERT INTO `customer` VALUES (13, '客户C', '13800000003', 'customerC@example.com', '广州市越秀区XX路XX号'); +INSERT INTO `customer` VALUES (14, '客户D', '13800000004', 'customerD@example.com', '深圳市福田区XX路XX号'); +INSERT INTO `customer` VALUES (15, '客户E', '13800000005', 'customerE@example.com', '成都市锦江区XX路XX号'); +INSERT INTO `customer` VALUES (16, '客户F', '13800000006', 'customerF@example.com', '杭州市拱墅区XX路XX号'); +INSERT INTO `customer` VALUES (17, '客户G', '13800000007', 'customerG@example.com', '武汉市武昌区XX路XX号'); +INSERT INTO `customer` VALUES (18, '客户H', '13800000008', 'customerH@example.com', '南京市玄武区XX路XX号'); +INSERT INTO `customer` VALUES (19, '客户王继威', '13800000009', 'customerI@example.com', '西安市碑林区XX路XX号'); +INSERT INTO `customer` VALUES (20, '客户李保航', '13800000010', 'customerJ@example.com', '重庆市江北区XX路XX号'); + +-- ---------------------------- +-- Table structure for deleted_goods +-- ---------------------------- +DROP TABLE IF EXISTS `deleted_goods`; +CREATE TABLE `deleted_goods` ( + `DeletedGoodsID` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, + `GoodsName` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, + `DeletedDate` timestamp NULL DEFAULT CURRENT_TIMESTAMP +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of deleted_goods +-- ---------------------------- + +-- ---------------------------- +-- Table structure for employee +-- ---------------------------- +DROP TABLE IF EXISTS `employee`; +CREATE TABLE `employee` ( + `EmployeeID` int NOT NULL AUTO_INCREMENT, + `EmployeeName` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `EmployeePosition` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `ContactNumber` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `Email` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, + PRIMARY KEY (`EmployeeID`) USING BTREE, + INDEX `idx_employee_name`(`EmployeeName` ASC) USING BTREE, + UNIQUE INDEX `idx_employee_employeeid`(`EmployeeID` ASC) USING BTREE, + INDEX `idx_employee_EmployeePosition`(`EmployeePosition` ASC) USING BTREE, + INDEX `idx_employee_employeename`(`EmployeeName` ASC) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of employee +-- ---------------------------- +INSERT INTO `employee` VALUES (1, '员工A', '仓库管理员', '13900000001', 'employeeA@example.com'); +INSERT INTO `employee` VALUES (2, '员工B', '物流配送人员', '13900000002', 'employeeB@example.com'); +INSERT INTO `employee` VALUES (3, '员工C', '采购人员', '13900000003', 'employeeC@example.com'); +INSERT INTO `employee` VALUES (4, '员工D', '仓库管理员', '13900000004', 'employeeD@example.com'); +INSERT INTO `employee` VALUES (5, '员工E', '物流配送人员', '13900000005', 'employeeE@example.com'); +INSERT INTO `employee` VALUES (6, '员工F', '采购人员', '13900000006', 'employeeF@example.com'); +INSERT INTO `employee` VALUES (7, '员工G', '仓库管理员', '13900000007', 'employeeG@example.com'); +INSERT INTO `employee` VALUES (8, '员工H', '物流配送人员', '13900000008', 'employeeH@example.com'); +INSERT INTO `employee` VALUES (9, '员工I', '采购人员', '13900000009', 'employeeI@example.com'); +INSERT INTO `employee` VALUES (10, '员工J', '仓库管理员', '13900000010', 'employeeJ@example.com'); + +-- ---------------------------- +-- Table structure for employee_log +-- ---------------------------- +DROP TABLE IF EXISTS `employee_log`; +CREATE TABLE `employee_log` ( + `LogID` int NOT NULL AUTO_INCREMENT, + `EmployeeID` int NULL DEFAULT NULL, + `OldEmployeeName` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, + `NewEmployeeName` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, + `OldDepartment` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, + `NewDepartment` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, + `ChangeDate` timestamp NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`LogID`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of employee_log +-- ---------------------------- + +-- ---------------------------- +-- Table structure for goods +-- ---------------------------- +DROP TABLE IF EXISTS `goods`; +CREATE TABLE `goods` ( + `GoodsID` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `GoodsName` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `GoodsType` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `ProductionDate` date NULL DEFAULT NULL, + `SafetyStock` int NOT NULL, + `PurchaseUnitPrice` decimal(8, 2) NOT NULL, + `SupplierID` int NULL DEFAULT NULL, + PRIMARY KEY (`GoodsID`) USING BTREE, + INDEX `FK_Goods_Supplier`(`SupplierID` ASC) USING BTREE, + INDEX `idx_goods_name`(`GoodsName` ASC) USING BTREE, + INDEX `idx_goods_type`(`GoodsType` ASC) USING BTREE, + INDEX `idx_production_date`(`ProductionDate` ASC) USING BTREE, + UNIQUE INDEX `idx_goods_goodsid`(`GoodsID` ASC) USING BTREE, + INDEX `idx_goods_GoodsType`(`GoodsType` ASC) USING BTREE, + INDEX `idx_goods_PurchaseUnitPrice`(`PurchaseUnitPrice` ASC) USING BTREE, + INDEX `idx_goods_GoodsType_PurchaseUnitPrice`(`GoodsType` ASC, `PurchaseUnitPrice` ASC) USING BTREE, + CONSTRAINT `FK_Goods_Supplier` FOREIGN KEY (`SupplierID`) REFERENCES `supplier` (`SupplierID`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `goods_chk_1` CHECK (`SafetyStock` >= 0), + CONSTRAINT `goods_chk_2` CHECK (`PurchaseUnitPrice` >= 0) +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of goods +-- ---------------------------- +INSERT INTO `goods` VALUES ('G001', '电脑显示器', '电子产品', '2023-01-01', 10, 600.00, 1); +INSERT INTO `goods` VALUES ('G002', '运动鞋', '服装', '2023-02-01', 20, 80.00, 2); +INSERT INTO `goods` VALUES ('G003', '苹果手机', '电子产品', '2023-03-01', 15, 800.00, 3); +INSERT INTO `goods` VALUES ('G004', '牛奶', '食品', '2023-04-01', 30, 5.00, 4); +INSERT INTO `goods` VALUES ('G005', '衬衫', '服装', '2023-05-01', 18, 50.00, 5); +INSERT INTO `goods` VALUES ('G006', '打印机', '电子产品', '2023-06-01', 8, 300.00, 6); +INSERT INTO `goods` VALUES ('G007', '面包', '食品', '2023-07-01', 25, 3.00, 7); +INSERT INTO `goods` VALUES ('G008', '牛仔裤', '服装', '2023-08-01', 22, 60.00, 8); +INSERT INTO `goods` VALUES ('G009', '平板电脑', '电子产品', '2023-09-01', 12, 600.00, 9); +INSERT INTO `goods` VALUES ('G010', '果汁', '食品', '2023-10-01', 35, 4.00, 10); + +-- ---------------------------- +-- Table structure for inboundrecord +-- ---------------------------- +DROP TABLE IF EXISTS `inboundrecord`; +CREATE TABLE `inboundrecord` ( + `InboundRecordID` int NOT NULL AUTO_INCREMENT, + `GoodsID` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `WarehouseID` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `InboundQuantity` int NOT NULL, + `InboundDate` date NOT NULL, + `EmployeeID` int NOT NULL, + PRIMARY KEY (`InboundRecordID`) USING BTREE, + INDEX `idx_inbound_record_goods_id`(`GoodsID` ASC) USING BTREE, + INDEX `idx_inbound_record_warehouse_id`(`WarehouseID` ASC) USING BTREE, + INDEX `idx_inbound_record_employee_id`(`EmployeeID` ASC) USING BTREE, + CONSTRAINT `FK_InboundRecord_Employee` FOREIGN KEY (`EmployeeID`) REFERENCES `employee` (`EmployeeID`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `FK_InboundRecord_Goods` FOREIGN KEY (`GoodsID`) REFERENCES `goods` (`GoodsID`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `FK_InboundRecord_Warehouse` FOREIGN KEY (`WarehouseID`) REFERENCES `warehouse` (`WarehouseID`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `inboundrecord_chk_1` CHECK (`InboundQuantity` > 0) +) ENGINE = InnoDB AUTO_INCREMENT = 21 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of inboundrecord +-- ---------------------------- +INSERT INTO `inboundrecord` VALUES (1, 'G001', 'WH01', 10, '2024-01-01', 1); +INSERT INTO `inboundrecord` VALUES (2, 'G002', 'WH02', 20, '2024-01-02', 2); +INSERT INTO `inboundrecord` VALUES (3, 'G003', 'WH03', 15, '2024-01-03', 3); +INSERT INTO `inboundrecord` VALUES (4, 'G004', 'WH04', 30, '2024-01-04', 4); +INSERT INTO `inboundrecord` VALUES (5, 'G005', 'WH05', 18, '2024-01-05', 5); +INSERT INTO `inboundrecord` VALUES (6, 'G006', 'WH06', 8, '2024-01-06', 6); +INSERT INTO `inboundrecord` VALUES (7, 'G007', 'WH07', 25, '2024-01-07', 7); +INSERT INTO `inboundrecord` VALUES (8, 'G008', 'WH08', 22, '2024-01-08', 8); +INSERT INTO `inboundrecord` VALUES (9, 'G009', 'WH09', 12, '2024-01-09', 9); +INSERT INTO `inboundrecord` VALUES (10, 'G010', 'WH10', 35, '2024-01-10', 10); +INSERT INTO `inboundrecord` VALUES (11, 'G001', 'WH01', 5, '2024-01-11', 1); +INSERT INTO `inboundrecord` VALUES (12, 'G002', 'WH02', 10, '2024-01-12', 2); +INSERT INTO `inboundrecord` VALUES (13, 'G003', 'WH03', 8, '2024-01-13', 3); +INSERT INTO `inboundrecord` VALUES (14, 'G004', 'WH04', 15, '2024-01-14', 4); +INSERT INTO `inboundrecord` VALUES (15, 'G005', 'WH05', 10, '2024-01-15', 5); +INSERT INTO `inboundrecord` VALUES (16, 'G006', 'WH06', 5, '2024-01-16', 6); +INSERT INTO `inboundrecord` VALUES (17, 'G007', 'WH07', 15, '2024-01-17', 7); +INSERT INTO `inboundrecord` VALUES (18, 'G008', 'WH08', 10, '2024-01-18', 8); +INSERT INTO `inboundrecord` VALUES (19, 'G009', 'WH09', 8, '2024-01-19', 9); +INSERT INTO `inboundrecord` VALUES (20, 'G010', 'WH10', 20, '2024-01-20', 10); + +-- ---------------------------- +-- Table structure for order +-- ---------------------------- +DROP TABLE IF EXISTS `order`; +CREATE TABLE `order` ( + `OrderID` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `OrderDate` datetime NOT NULL, + `CustomerID` int NOT NULL, + `OrderStatus` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `customer_id` int NULL DEFAULT NULL, + PRIMARY KEY (`OrderID`) USING BTREE, + INDEX `idx_order_date`(`OrderDate` ASC) USING BTREE, + INDEX `idx_customer_id`(`CustomerID` ASC) USING BTREE, + UNIQUE INDEX `idx_order_orderid`(`OrderID` ASC) USING BTREE, + INDEX `idx_order_customerid`(`CustomerID` ASC) USING BTREE, + INDEX `idx_order_orderdate`(`OrderDate` ASC) USING BTREE, + INDEX `idx_order_status_date`(`OrderStatus` ASC, `OrderDate` ASC) USING BTREE, + CONSTRAINT `FK_Order_Customer` FOREIGN KEY (`CustomerID`) REFERENCES `customer` (`CustomerID`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of order +-- ---------------------------- +INSERT INTO `order` VALUES ('1', '2024-01-01 00:00:00', 1, 'Completed', 101); +INSERT INTO `order` VALUES ('10', '2024-01-10 00:00:00', 5, 'Delivered', 105); +INSERT INTO `order` VALUES ('2', '2024-01-02 00:00:00', 2, 'Pending', 102); +INSERT INTO `order` VALUES ('3', '2024-01-03 00:00:00', 3, 'Processing', 103); +INSERT INTO `order` VALUES ('4', '2024-01-04 00:00:00', 4, 'Shipped', 104); +INSERT INTO `order` VALUES ('5', '2024-01-05 00:00:00', 5, 'Cancelled', 105); +INSERT INTO `order` VALUES ('6', '2024-01-06 00:00:00', 1, 'Completed', 101); +INSERT INTO `order` VALUES ('7', '2024-01-07 00:00:00', 2, 'Pending', 102); +INSERT INTO `order` VALUES ('8', '2024-01-08 00:00:00', 3, 'Processing', 103); +INSERT INTO `order` VALUES ('9', '2024-01-09 00:00:00', 4, 'Shipped', 104); + +-- ---------------------------- +-- Table structure for order_log +-- ---------------------------- +DROP TABLE IF EXISTS `order_log`; +CREATE TABLE `order_log` ( + `LogID` int NOT NULL AUTO_INCREMENT, + `OrderID` int NULL DEFAULT NULL, + `OldStatus` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, + `NewStatus` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, + `ChangeDate` timestamp NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (`LogID`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of order_log +-- ---------------------------- + +-- ---------------------------- +-- Table structure for orderdetail +-- ---------------------------- +DROP TABLE IF EXISTS `orderdetail`; +CREATE TABLE `orderdetail` ( + `OrderDetailID` int NOT NULL AUTO_INCREMENT, + `OrderID` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `GoodsID` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `GoodsName` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `GoodsSpecification` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `OrderQuantity` int NOT NULL, + `UnitPrice` decimal(10, 2) NOT NULL, + `TotalPrice` decimal(10, 2) NOT NULL, + PRIMARY KEY (`OrderDetailID`) USING BTREE, + INDEX `idx_order_detail_order_id`(`OrderID` ASC) USING BTREE, + INDEX `idx_order_detail_goods_id`(`GoodsID` ASC) USING BTREE, + CONSTRAINT `FK_OrderDetail_Goods` FOREIGN KEY (`GoodsID`) REFERENCES `goods` (`GoodsID`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `FK_OrderDetail_Order` FOREIGN KEY (`OrderID`) REFERENCES `order` (`OrderID`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `orderdetail_chk_1` CHECK (`OrderQuantity` >= 0), + CONSTRAINT `orderdetail_chk_2` CHECK (`UnitPrice` >= 0) +) ENGINE = InnoDB AUTO_INCREMENT = 111 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of orderdetail +-- ---------------------------- +INSERT INTO `orderdetail` VALUES (1, '1', 'G001', '电脑显示器', '24 英寸高清显示器', 2, 500.00, 1000.00); +INSERT INTO `orderdetail` VALUES (2, '1', 'G003', '苹果手机', 'iPhone 13 128GB', 1, 800.00, 800.00); +INSERT INTO `orderdetail` VALUES (3, '2', 'G002', '运动鞋', '男款跑步鞋,尺码 42', 3, 80.00, 240.00); +INSERT INTO `orderdetail` VALUES (4, '2', 'G005', '衬衫', '白色纯棉衬衫,尺码 M', 2, 50.00, 100.00); +INSERT INTO `orderdetail` VALUES (5, '3', 'G004', '牛奶', '1L 装纯牛奶', 5, 5.00, 25.00); +INSERT INTO `orderdetail` VALUES (6, '3', 'G006', '打印机', '彩色喷墨打印机', 1, 300.00, 300.00); +INSERT INTO `orderdetail` VALUES (7, '4', 'G007', '面包', '全麦面包,500g', 4, 3.00, 12.00); +INSERT INTO `orderdetail` VALUES (8, '4', 'G008', '牛仔裤', '蓝色牛仔裤,尺码 32', 1, 60.00, 60.00); +INSERT INTO `orderdetail` VALUES (9, '5', 'G009', '平板电脑', 'iPad Air 10.5 英寸', 2, 600.00, 1200.00); +INSERT INTO `orderdetail` VALUES (10, '5', 'G010', '果汁', '橙汁,500ml', 6, 4.00, 24.00); +INSERT INTO `orderdetail` VALUES (101, '1', 'G001', '27寸高清电脑显示器', '分辨率:2560x1440,刷新率:144Hz', 3, 450.00, 1350.00); +INSERT INTO `orderdetail` VALUES (102, '1', 'G002', '专业跑鞋', '适合长跑,轻便透气,尺码:43', 2, 120.00, 240.00); +INSERT INTO `orderdetail` VALUES (103, '2', 'G003', '智能手机', '存储:256GB,摄像头:4800万像素', 1, 750.00, 750.00); +INSERT INTO `orderdetail` VALUES (104, '2', 'G004', '纯牛奶', '有机,2L装', 4, 8.00, 32.00); +INSERT INTO `orderdetail` VALUES (105, '3', 'G005', '男士衬衫', '纯棉材质,长袖,尺码:L', 5, 60.00, 300.00); +INSERT INTO `orderdetail` VALUES (106, '3', 'G006', '彩色激光打印机', '打印速度:20页/分钟', 1, 400.00, 400.00); +INSERT INTO `orderdetail` VALUES (107, '4', 'G007', '全麦面包', '无麸质,700g装', 6, 5.00, 30.00); +INSERT INTO `orderdetail` VALUES (108, '4', 'G008', '女士牛仔裤', '修身版型,蓝色,尺码:28', 3, 80.00, 240.00); +INSERT INTO `orderdetail` VALUES (109, '5', 'G009', '平板电脑', '10.1寸屏幕,64GB存储', 2, 550.00, 1100.00); +INSERT INTO `orderdetail` VALUES (110, '5', 'G010', '苹果汁', '鲜榨,1L装', 7, 6.00, 42.00); + +-- ---------------------------- +-- Table structure for outboundrecord +-- ---------------------------- +DROP TABLE IF EXISTS `outboundrecord`; +CREATE TABLE `outboundrecord` ( + `OutboundRecordID` int NOT NULL AUTO_INCREMENT, + `GoodsID` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `WarehouseID` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `OutboundQuantity` int NOT NULL, + `OutboundDate` date NOT NULL, + `OrderID` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, + `EmployeeID` int NOT NULL, + PRIMARY KEY (`OutboundRecordID`) USING BTREE, + INDEX `idx_outbound_record_goods_id`(`GoodsID` ASC) USING BTREE, + INDEX `idx_outbound_record_warehouse_id`(`WarehouseID` ASC) USING BTREE, + INDEX `idx_outbound_record_order_id`(`OrderID` ASC) USING BTREE, + INDEX `idx_outbound_record_employee_id`(`EmployeeID` ASC) USING BTREE, + UNIQUE INDEX `idx_outboundrecord_recordid`(`OutboundRecordID` ASC) USING BTREE, + INDEX `idx_outboundrecord_warehouseid`(`WarehouseID` ASC) USING BTREE, + INDEX `idx_outboundrecord_orderid`(`OrderID` ASC) USING BTREE, + INDEX `idx_outboundrecord_warehouse_date`(`WarehouseID` ASC, `OutboundDate` ASC) USING BTREE, + CONSTRAINT `FK_OutboundRecord_Employee` FOREIGN KEY (`EmployeeID`) REFERENCES `employee` (`EmployeeID`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `FK_OutboundRecord_Goods` FOREIGN KEY (`GoodsID`) REFERENCES `goods` (`GoodsID`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `FK_OutboundRecord_Order` FOREIGN KEY (`OrderID`) REFERENCES `order` (`OrderID`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `FK_OutboundRecord_Warehouse` FOREIGN KEY (`WarehouseID`) REFERENCES `warehouse` (`WarehouseID`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `outboundrecord_chk_1` CHECK (`OutboundQuantity` > 0) +) ENGINE = InnoDB AUTO_INCREMENT = 141 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of outboundrecord +-- ---------------------------- +INSERT INTO `outboundrecord` VALUES (1, 'G001', 'WH01', 20, '2024-01-01', '1', 1); +INSERT INTO `outboundrecord` VALUES (2, 'G002', 'WH02', 10, '2024-01-02', '2', 2); +INSERT INTO `outboundrecord` VALUES (3, 'G003', 'WH03', 8, '2024-01-03', '3', 3); +INSERT INTO `outboundrecord` VALUES (4, 'G004', 'WH04', 3, '2024-01-04', '4', 4); +INSERT INTO `outboundrecord` VALUES (5, 'G005', 'WH05', 12, '2024-01-05', '5', 5); +INSERT INTO `outboundrecord` VALUES (6, 'G006', 'WH06', 7, '2024-01-06', '6', 6); +INSERT INTO `outboundrecord` VALUES (7, 'G007', 'WH07', 9, '2024-01-07', '7', 7); +INSERT INTO `outboundrecord` VALUES (8, 'G008', 'WH08', 4, '2024-01-08', '8', 8); +INSERT INTO `outboundrecord` VALUES (9, 'G009', 'WH09', 6, '2024-01-09', '9', 9); +INSERT INTO `outboundrecord` VALUES (10, 'G010', 'WH10', 15, '2024-01-10', '10', 10); + +-- ---------------------------- +-- Table structure for supplier +-- ---------------------------- +DROP TABLE IF EXISTS `supplier`; +CREATE TABLE `supplier` ( + `SupplierID` int NOT NULL AUTO_INCREMENT, + `SupplyPrice` decimal(10, 2) NOT NULL, + `SupplierName` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + PRIMARY KEY (`SupplierID`) USING BTREE, + INDEX `idx_supplier_name`(`SupplierName` ASC) USING BTREE, + CONSTRAINT `supplier_chk_1` CHECK (`SupplyPrice` >= 0) +) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of supplier +-- ---------------------------- +INSERT INTO `supplier` VALUES (1, 10.50, '供应商A'); +INSERT INTO `supplier` VALUES (2, 12.30, '供应商B'); +INSERT INTO `supplier` VALUES (3, 9.80, '供应商C'); +INSERT INTO `supplier` VALUES (4, 15.20, '供应商D'); +INSERT INTO `supplier` VALUES (5, 11.00, '供应商E'); +INSERT INTO `supplier` VALUES (6, 13.50, '供应商F'); +INSERT INTO `supplier` VALUES (7, 14.10, '供应商G'); +INSERT INTO `supplier` VALUES (8, 8.90, '供应商H'); +INSERT INTO `supplier` VALUES (9, 16.00, '供应商I'); +INSERT INTO `supplier` VALUES (10, 12.80, '供应商J'); + +-- ---------------------------- +-- Table structure for warehouse +-- ---------------------------- +DROP TABLE IF EXISTS `warehouse`; +CREATE TABLE `warehouse` ( + `WarehouseID` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `WarehouseName` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `WarehouseAddress` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `WarehouseArea` int NOT NULL, + PRIMARY KEY (`WarehouseID`) USING BTREE, + INDEX `idx_warehouse_name`(`WarehouseName` ASC) USING BTREE, + INDEX `idx_warehouse_address`(`WarehouseAddress` ASC) USING BTREE, + UNIQUE INDEX `idx_warehouse_warehouseid`(`WarehouseID` ASC) USING BTREE, + CONSTRAINT `warehouse_chk_1` CHECK (`WarehouseArea` > 0) +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of warehouse +-- ---------------------------- +INSERT INTO `warehouse` VALUES ('WH01', '北京仓库', '北京市朝阳区XX路XX号', 1000); +INSERT INTO `warehouse` VALUES ('WH02', '上海仓库', '上海市浦东新区XX路XX号', 1200); +INSERT INTO `warehouse` VALUES ('WH03', '广州仓库', '广州市天河区XX路XX号', 800); +INSERT INTO `warehouse` VALUES ('WH04', '深圳仓库', '深圳市南山区XX路XX号', 900); +INSERT INTO `warehouse` VALUES ('WH05', '成都仓库', '成都市高新区XX路XX号', 700); +INSERT INTO `warehouse` VALUES ('WH06', '杭州仓库', '杭州市西湖区XX路XX号', 600); +INSERT INTO `warehouse` VALUES ('WH07', '武汉仓库', '武汉市江汉区XX路XX号', 500); +INSERT INTO `warehouse` VALUES ('WH08', '南京仓库', '南京市鼓楼区XX路XX号', 400); +INSERT INTO `warehouse` VALUES ('WH09', '西安仓库', '西安市雁塔区XX路XX号', 300); +INSERT INTO `warehouse` VALUES ('WH10', '重庆仓库', '重庆市渝中区XX路XX号', 550); + +-- ---------------------------- +-- Table structure for warehousestoragearea +-- ---------------------------- +DROP TABLE IF EXISTS `warehousestoragearea`; +CREATE TABLE `warehousestoragearea` ( + `AreaID` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `WarehouseID` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `AreaType` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, + `AreaCapacity` int NOT NULL, + PRIMARY KEY (`AreaID`) USING BTREE, + INDEX `FK_Area_Warehouse`(`WarehouseID` ASC) USING BTREE, + INDEX `idx_area_type`(`AreaType` ASC) USING BTREE, + CONSTRAINT `FK_Area_Warehouse` FOREIGN KEY (`WarehouseID`) REFERENCES `warehouse` (`WarehouseID`) ON DELETE RESTRICT ON UPDATE RESTRICT, + CONSTRAINT `warehousestoragearea_chk_1` CHECK (`AreaCapacity` >= 0) +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of warehousestoragearea +-- ---------------------------- +INSERT INTO `warehousestoragearea` VALUES ('A01', 'WH01', '货架区', 500); +INSERT INTO `warehousestoragearea` VALUES ('A02', 'WH01', '堆垛区', 300); +INSERT INTO `warehousestoragearea` VALUES ('A03', 'WH02', '货架区', 400); +INSERT INTO `warehousestoragearea` VALUES ('A04', 'WH02', '堆垛区', 250); +INSERT INTO `warehousestoragearea` VALUES ('A05', 'WH03', '货架区', 350); +INSERT INTO `warehousestoragearea` VALUES ('A06', 'WH03', '堆垛区', 200); +INSERT INTO `warehousestoragearea` VALUES ('A07', 'WH04', '货架区', 300); +INSERT INTO `warehousestoragearea` VALUES ('A08', 'WH04', '堆垛区', 180); +INSERT INTO `warehousestoragearea` VALUES ('A09', 'WH05', '货架区', 250); +INSERT INTO `warehousestoragearea` VALUES ('A10', 'WH05', '堆垛区', 150); +INSERT INTO `warehousestoragearea` VALUES ('A11', 'WH06', '货架区', 200); +INSERT INTO `warehousestoragearea` VALUES ('A12', 'WH06', '堆垛区', 120); +INSERT INTO `warehousestoragearea` VALUES ('A13', 'WH07', '货架区', 180); +INSERT INTO `warehousestoragearea` VALUES ('A14', 'WH07', '堆垛区', 100); +INSERT INTO `warehousestoragearea` VALUES ('A15', 'WH08', '货架区', 150); +INSERT INTO `warehousestoragearea` VALUES ('A16', 'WH08', '堆垛区', 80); +INSERT INTO `warehousestoragearea` VALUES ('A17', 'WH09', '货架区', 120); +INSERT INTO `warehousestoragearea` VALUES ('A18', 'WH09', '堆垛区', 60); +INSERT INTO `warehousestoragearea` VALUES ('A19', 'WH10', '货架区', 180); +INSERT INTO `warehousestoragearea` VALUES ('A20', 'WH10', '堆垛区', 100); + +-- ---------------------------- +-- View structure for employee_order_info +-- ---------------------------- +DROP VIEW IF EXISTS `employee_order_info`; +CREATE ALGORITHM = UNDEFINED SQL SECURITY DEFINER VIEW `employee_order_info` AS select `e`.`EmployeeName` AS `EmployeeName`,`e`.`EmployeePosition` AS `EmployeePosition`,`o`.`OrderID` AS `OrderID`,`o`.`OrderDate` AS `OrderDate`,`o`.`OrderStatus` AS `OrderStatus` from (`employee` `e` join `order` `o` on((`e`.`EmployeeID` = `o`.`OrderID`))); + +-- ---------------------------- +-- View structure for goods_with_outbound +-- ---------------------------- +DROP VIEW IF EXISTS `goods_with_outbound`; +CREATE ALGORITHM = UNDEFINED SQL SECURITY DEFINER VIEW `goods_with_outbound` AS select `g`.`GoodsID` AS `GoodsID`,`g`.`GoodsName` AS `GoodsName`,`g`.`GoodsType` AS `GoodsType`,`g`.`ProductionDate` AS `ProductionDate`,`g`.`SafetyStock` AS `SafetyStock`,`g`.`PurchaseUnitPrice` AS `PurchaseUnitPrice`,`g`.`SupplierID` AS `SupplierID`,`orr`.`OutboundQuantity` AS `OutboundQuantity`,`orr`.`OutboundDate` AS `OutboundDate` from (`goods` `g` join `outboundrecord` `orr` on((`g`.`GoodsID` = `orr`.`GoodsID`))); + +-- ---------------------------- +-- View structure for high_value_orders +-- ---------------------------- +DROP VIEW IF EXISTS `high_value_orders`; +CREATE ALGORITHM = UNDEFINED SQL SECURITY DEFINER VIEW `high_value_orders` AS select `o`.`OrderID` AS `OrderID`,`o`.`OrderDate` AS `OrderDate`,`o`.`CustomerID` AS `CustomerID`,sum(`od`.`TotalPrice`) AS `OrderTotalPrice` from (`order` `o` join `orderdetail` `od` on((`o`.`OrderID` = `od`.`OrderID`))) group by `o`.`OrderID`,`o`.`OrderDate`,`o`.`CustomerID` having (sum(`od`.`TotalPrice`) > 1000); + +-- ---------------------------- +-- View structure for incomplete_orders +-- ---------------------------- +DROP VIEW IF EXISTS `incomplete_orders`; +CREATE ALGORITHM = UNDEFINED SQL SECURITY DEFINER VIEW `incomplete_orders` AS select `o`.`OrderID` AS `OrderID`,`o`.`OrderDate` AS `OrderDate`,`o`.`CustomerID` AS `CustomerID`,`o`.`OrderStatus` AS `OrderStatus`,`od`.`GoodsID` AS `GoodsID`,`od`.`GoodsName` AS `GoodsName` from (`order` `o` join `orderdetail` `od` on((`o`.`OrderID` = `od`.`OrderID`))) where (`o`.`OrderStatus` <> 'Completed'); + +-- ---------------------------- +-- View structure for order_with_customer +-- ---------------------------- +DROP VIEW IF EXISTS `order_with_customer`; +CREATE ALGORITHM = UNDEFINED SQL SECURITY DEFINER VIEW `order_with_customer` AS select `o`.`OrderID` AS `OrderID`,`o`.`OrderDate` AS `OrderDate`,`o`.`CustomerID` AS `CustomerID`,`o`.`OrderStatus` AS `OrderStatus`,`o`.`customer_id` AS `customer_id`,`c`.`CustomerName` AS `CustomerName`,`c`.`CustomerAddress` AS `CustomerAddress` from (`order` `o` join `customer` `c` on((`o`.`CustomerID` = `c`.`CustomerID`))); + +-- ---------------------------- +-- View structure for warehouse_outbound_total +-- ---------------------------- +DROP VIEW IF EXISTS `warehouse_outbound_total`; +CREATE ALGORITHM = UNDEFINED SQL SECURITY DEFINER VIEW `warehouse_outbound_total` AS select `w`.`WarehouseID` AS `WarehouseID`,`w`.`WarehouseName` AS `WarehouseName`,sum(`orr`.`OutboundQuantity`) AS `TotalOutboundQuantity` from (`warehouse` `w` join `outboundrecord` `orr` on((`w`.`WarehouseID` = `orr`.`WarehouseID`))) group by `w`.`WarehouseID`,`w`.`WarehouseName`; + +-- ---------------------------- +-- Procedure structure for CalculateWarehouseOutboundTotal +-- ---------------------------- +DROP PROCEDURE IF EXISTS `CalculateWarehouseOutboundTotal`; +delimiter ;; +CREATE DEFINER=`root`@`localhost` PROCEDURE `CalculateWarehouseOutboundTotal`( + IN p_WarehouseID VARCHAR(255), + OUT p_TotalOutbound INT +) +BEGIN + SELECT SUM(OutboundQuantity) INTO p_TotalOutbound + FROM outboundrecord + WHERE WarehouseID = p_WarehouseID; +END +;; +delimiter ; + +-- ---------------------------- +-- Procedure structure for DeleteOrderAndOutbound +-- ---------------------------- +DROP PROCEDURE IF EXISTS `DeleteOrderAndOutbound`; +delimiter ;; +CREATE DEFINER=`root`@`localhost` PROCEDURE `DeleteOrderAndOutbound`( + IN p_OrderID INT +) +BEGIN + DELETE FROM outboundrecord WHERE OrderID = p_OrderID; + DELETE FROM `order` WHERE OrderID = p_OrderID; +END +;; +delimiter ; + +-- ---------------------------- +-- Procedure structure for GetOutboundRecordsByDateRange +-- ---------------------------- +DROP PROCEDURE IF EXISTS `GetOutboundRecordsByDateRange`; +delimiter ;; +CREATE DEFINER=`root`@`localhost` PROCEDURE `GetOutboundRecordsByDateRange`( + IN p_StartDate DATE, + IN p_EndDate DATE +) +BEGIN + SELECT * + FROM outboundrecord + WHERE OutboundDate BETWEEN p_StartDate AND p_EndDate; +END +;; +delimiter ; + +-- ---------------------------- +-- Procedure structure for InsertNewOrder +-- ---------------------------- +DROP PROCEDURE IF EXISTS `InsertNewOrder`; +delimiter ;; +CREATE DEFINER=`root`@`localhost` PROCEDURE `InsertNewOrder`( + IN p_OrderDate DATE, + IN p_CustomerID INT, + IN p_OrderStatus VARCHAR(50) +) +BEGIN + INSERT INTO `order` (OrderDate, CustomerID, OrderStatus) + VALUES (p_OrderDate, p_CustomerID, p_OrderStatus); +END +;; +delimiter ; + +-- ---------------------------- +-- Procedure structure for InsertOutboundRecordAndUpdateStock +-- ---------------------------- +DROP PROCEDURE IF EXISTS `InsertOutboundRecordAndUpdateStock`; +delimiter ;; +CREATE DEFINER=`root`@`localhost` PROCEDURE `InsertOutboundRecordAndUpdateStock`( + IN p_GoodsID VARCHAR(255), + IN p_WarehouseID VARCHAR(255), + IN p_OutboundQuantity INT, + IN p_OutboundDate DATE, + IN p_OrderID INT, + IN p_EmployeeID INT +) +BEGIN + DECLARE current_stock INT; + SELECT StockQuantity INTO current_stock FROM goods WHERE GoodsID = p_GoodsID; + IF current_stock >= p_OutboundQuantity THEN + INSERT INTO outboundrecord (GoodsID, WarehouseID, OutboundQuantity, OutboundDate, OrderID, EmployeeID) + VALUES (p_GoodsID, p_WarehouseID, p_OutboundQuantity, p_OutboundDate, p_OrderID, p_EmployeeID); + UPDATE goods + SET StockQuantity = StockQuantity - p_OutboundQuantity + WHERE GoodsID = p_GoodsID; + ELSE + SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Insufficient stock for the outbound operation.'; + END IF; +END +;; +delimiter ; + +-- ---------------------------- +-- Procedure structure for UpdateOrderStatus +-- ---------------------------- +DROP PROCEDURE IF EXISTS `UpdateOrderStatus`; +delimiter ;; +CREATE DEFINER=`root`@`localhost` PROCEDURE `UpdateOrderStatus`( + IN p_OrderID INT, + IN p_NewStatus VARCHAR(50) +) +BEGIN + UPDATE `order` + SET OrderStatus = p_NewStatus + WHERE OrderID = p_OrderID; +END +;; +delimiter ; + +-- ---------------------------- +-- Triggers structure for table employee +-- ---------------------------- +DROP TRIGGER IF EXISTS `tr_before_update_employee`; +delimiter ;; +CREATE TRIGGER `tr_before_update_employee` BEFORE UPDATE ON `employee` FOR EACH ROW BEGIN + INSERT INTO employee_log (EmployeeID, OldEmployeeName, NewEmployeeName, OldEmployeePosition, NewEmployeePosition) + VALUES (OLD.EmployeeID, OLD.EmployeeName, NEW.EmployeeName, OLD.EmployeePosition, NEW.EmployeePosition); +END +;; +delimiter ; + +-- ---------------------------- +-- Triggers structure for table goods +-- ---------------------------- +DROP TRIGGER IF EXISTS `tr_before_delete_goods`; +delimiter ;; +CREATE TRIGGER `tr_before_delete_goods` BEFORE DELETE ON `goods` FOR EACH ROW BEGIN + INSERT INTO deleted_goods (DeletedGoodsID, GoodsName) + VALUES (OLD.GoodsID, OLD.GoodsName); +END +;; +delimiter ; + +-- ---------------------------- +-- Triggers structure for table order +-- ---------------------------- +DROP TRIGGER IF EXISTS `tr_before_insert_order`; +delimiter ;; +CREATE TRIGGER `tr_before_insert_order` BEFORE INSERT ON `order` FOR EACH ROW BEGIN + SET NEW.OrderDate = CURDATE(); +END +;; +delimiter ; + +-- ---------------------------- +-- Triggers structure for table order +-- ---------------------------- +DROP TRIGGER IF EXISTS `tr_after_update_order_status`; +delimiter ;; +CREATE TRIGGER `tr_after_update_order_status` AFTER UPDATE ON `order` FOR EACH ROW BEGIN + IF OLD.OrderStatus!= NEW.OrderStatus THEN + INSERT INTO order_log (OrderID, OldStatus, NewStatus) + VALUES (OLD.OrderID, OLD.OrderStatus, NEW.OrderStatus); + END IF; +END +;; +delimiter ; + +-- ---------------------------- +-- Triggers structure for table outboundrecord +-- ---------------------------- +DROP TRIGGER IF EXISTS `tr_after_insert_outboundrecord`; +delimiter ;; +CREATE TRIGGER `tr_after_insert_outboundrecord` AFTER INSERT ON `outboundrecord` FOR EACH ROW BEGIN + UPDATE goods + SET StockQuantity = StockQuantity - NEW.OutboundQuantity + WHERE GoodsID = NEW.GoodsID; +END +;; +delimiter ; + +-- ---------------------------- +-- Triggers structure for table outboundrecord +-- ---------------------------- +DROP TRIGGER IF EXISTS `tr_before_delete_outboundrecord`; +delimiter ;; +CREATE TRIGGER `tr_before_delete_outboundrecord` BEFORE DELETE ON `outboundrecord` FOR EACH ROW BEGIN + UPDATE goods + SET StockQuantity = StockQuantity + OLD.OutboundQuantity + WHERE GoodsID = OLD.GoodsID; +END +;; +delimiter ; + +SET FOREIGN_KEY_CHECKS = 1;