from tortoise import BaseDBAsyncClient async def upgrade(db: BaseDBAsyncClient) -> str: return """ CREATE TABLE IF NOT EXISTS `aerich` ( `id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT, `version` VARCHAR(255) NOT NULL, `app` VARCHAR(100) NOT NULL, `content` JSON NOT NULL ) CHARACTER SET utf8mb4; CREATE TABLE IF NOT EXISTS `Agvs` ( `id` CHAR(36) NOT NULL PRIMARY KEY, `num` VARCHAR(255) COMMENT '短编号', `agvid` VARCHAR(255) COMMENT 'AGV小车编号', `percent` DECIMAL(3,2) NOT NULL COMMENT '小车电量' DEFAULT 1, `records` JSON COMMENT '记录列表', `curorder` VARCHAR(255) COMMENT '当前订单号', `curstop` VARCHAR(255) COMMENT '当前站点', `curitinerary` JSON COMMENT '订单对应的全局最短路径', `is_charging` BOOL NOT NULL COMMENT '充电中' DEFAULT 0, `is_busy` BOOL NOT NULL COMMENT '设备忙' DEFAULT 0, `is_abnormal` BOOL NOT NULL COMMENT '是否异常' DEFAULT 0, `abnormal_time` DATETIME(6) COMMENT '异常时间', `is_done` BOOL NOT NULL COMMENT '是否完成' DEFAULT 0, `created_at` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), `updated_at` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), `is_valid` BOOL NOT NULL COMMENT '是否有效' DEFAULT 1, `is_active` BOOL NOT NULL COMMENT '是否删除' DEFAULT 1 ) CHARACTER SET utf8mb4 COMMENT='AGV管理表'; CREATE INDEX `num` ON `Agvs` (`num`); CREATE INDEX `agvid` ON `Agvs` (`agvid`); CREATE INDEX `agvs_is_busy` ON `Agvs` (`is_busy`); CREATE INDEX `agvs_is_abnormal` ON `Agvs` (`is_abnormal`); CREATE INDEX `agvs_is_done` ON `Agvs` (`is_done`); CREATE INDEX `agvs_is_charging` ON `Agvs` (`is_charging`); CREATE INDEX `is_valididx` ON `Agvs` (`is_valid`); CREATE INDEX `is_activeidx` ON `Agvs` (`is_active`); CREATE TABLE IF NOT EXISTS `Connections` ( `id` CHAR(36) NOT NULL PRIMARY KEY, `num` VARCHAR(255) COMMENT '短编号', `name` VARCHAR(255) COMMENT '接驳台编号', `memo` JSON COMMENT '备忘录', `created_at` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), `updated_at` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), `is_valid` BOOL NOT NULL COMMENT '是否取消' DEFAULT 1, `is_active` BOOL NOT NULL COMMENT '是否删除' DEFAULT 1 ) CHARACTER SET utf8mb4 COMMENT='暂存货架库存表'; CREATE INDEX `nameidx` ON `Connections` (`name`); CREATE INDEX `numidx` ON `Connections` (`num`); CREATE INDEX `is_valididx` ON `Connections` (`is_valid`); CREATE INDEX `is_activeidx` ON `Connections` (`is_active`); CREATE TABLE IF NOT EXISTS `Schelves` ( `id` CHAR(36) NOT NULL PRIMARY KEY, `num` VARCHAR(255) COMMENT '短编号', `name` VARCHAR(255) COMMENT '暂存货架编号', `memo` JSON COMMENT '备忘录', `created_at` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), `updated_at` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), `is_valid` BOOL NOT NULL COMMENT '是否取消' DEFAULT 1, `is_active` BOOL NOT NULL COMMENT '是否删除' DEFAULT 1 ) CHARACTER SET utf8mb4 COMMENT='暂存货架库存表'; CREATE INDEX `nameidx` ON `Schelves` (`name`); CREATE INDEX `numidx` ON `Schelves` (`num`); CREATE INDEX `is_valididx` ON `Schelves` (`is_valid`); CREATE INDEX `is_activeidx` ON `Schelves` (`is_active`); CREATE TABLE IF NOT EXISTS `users` ( `id` CHAR(36) NOT NULL PRIMARY KEY, `username` VARCHAR(255) NOT NULL COMMENT '账号', `name` VARCHAR(255) NOT NULL COMMENT '姓名', `phone` VARCHAR(11) COMMENT '手机号', `email` VARCHAR(255) COMMENT '邮箱', `created_at` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), `updated_at` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), `tag` VARCHAR(255) COMMENT '标签', `level` INT NOT NULL COMMENT '账号等级' DEFAULT 1, `is_admin` BOOL NOT NULL COMMENT '管理员账号' DEFAULT 0, `is_staff` BOOL NOT NULL COMMENT '员工账号' DEFAULT 0, `is_locked` BOOL NOT NULL COMMENT '是否锁定' DEFAULT 0, `is_valid` BOOL NOT NULL COMMENT '是否有效' DEFAULT 0, `is_active` BOOL NOT NULL COMMENT '是否删除' DEFAULT 0 ) CHARACTER SET utf8mb4 COMMENT='用户表'; CREATE INDEX `usernameidx` ON `users` (`username`); CREATE INDEX `nameidx` ON `users` (`name`); CREATE INDEX `phoneidx` ON `users` (`phone`); CREATE INDEX `emailidx` ON `users` (`email`); CREATE INDEX `is_adminidx` ON `users` (`is_admin`); CREATE INDEX `is_staffidx` ON `users` (`is_staff`); CREATE INDEX `is_lockedidx` ON `users` (`is_locked`); CREATE INDEX `is_valididx` ON `users` (`is_valid`); CREATE INDEX `is_activeidx` ON `users` (`is_active`); CREATE TABLE IF NOT EXISTS `Assignments` ( `id` CHAR(36) NOT NULL PRIMARY KEY, `num` VARCHAR(255) COMMENT '短编号', `orderid` VARCHAR(255) COMMENT '中控系统订单编号', `sequence` INT NOT NULL COMMENT '管理员手动排序号' DEFAULT 0, `ordertime` DATETIME(6) COMMENT '预约领用时间', `agvid` VARCHAR(255) COMMENT 'AGV小车编号', `itinerary` JSON COMMENT '订单对应的全局最短路径', `cmd` JSON COMMENT '下发给AGV的任务序列', `last` VARCHAR(255) COMMENT '最后上车的仓库编号', `loada` INT NOT NULL COMMENT 'A类型装载数量' DEFAULT 0, `loadb` INT NOT NULL COMMENT 'B类型装载数量' DEFAULT 0, `loadc` INT NOT NULL COMMENT 'C类型装载数量' DEFAULT 0, `loadd` INT NOT NULL COMMENT 'D类型装载数量' DEFAULT 0, `loade` INT NOT NULL COMMENT 'E类型装载数量' DEFAULT 0, `is_canceled` BOOL NOT NULL COMMENT '是否取消' DEFAULT 0, `cancel_time` DATETIME(6) COMMENT '取消时间', `is_processing` BOOL NOT NULL COMMENT '是否进行中' DEFAULT 0, `is_failed` BOOL NOT NULL COMMENT '是否失败' DEFAULT 0, `is_done` BOOL NOT NULL COMMENT '是否完成' DEFAULT 0, `created_at` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), `updated_at` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), `is_valid` BOOL NOT NULL COMMENT '是否有效' DEFAULT 1, `is_active` BOOL NOT NULL COMMENT '是否删除' DEFAULT 1, `owner_id` CHAR(36) COMMENT '订单所有人', CONSTRAINT `fk_Assignme_users_a5ea4274` FOREIGN KEY (`owner_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ) CHARACTER SET utf8mb4 COMMENT='任务安排表'; CREATE INDEX `num` ON `Assignments` (`num`); CREATE INDEX `agvid` ON `Assignments` (`agvid`); CREATE INDEX `orderididx` ON `Assignments` (`orderid`); CREATE INDEX `assignment_is_doneidx` ON `Assignments` (`is_done`); CREATE INDEX `assignment_is_canceledidx` ON `Assignments` (`is_canceled`); CREATE INDEX `is_processingidx` ON `Assignments` (`is_processing`); CREATE INDEX `is_failedidx` ON `Assignments` (`is_failed`); CREATE INDEX `is_valididx` ON `Assignments` (`is_valid`); CREATE INDEX `is_activeidx` ON `Assignments` (`is_active`); CREATE TABLE IF NOT EXISTS `Orders` ( `id` CHAR(36) NOT NULL PRIMARY KEY, `num` VARCHAR(255) COMMENT '短编号', `sequence` INT NOT NULL COMMENT '管理员手动排序号' DEFAULT 0, `orderid` VARCHAR(255) COMMENT '中控系统订单编号', `ordertime` DATETIME(6) COMMENT '预约领用时间', `is_canceled` BOOL NOT NULL COMMENT '是否取消' DEFAULT 0, `cancel_time` DATETIME(6) COMMENT '取消时间', `is_failed` BOOL NOT NULL COMMENT '是否失败' DEFAULT 0, `is_done` BOOL NOT NULL COMMENT '是否完成' DEFAULT 0, `is_finish` BOOL NOT NULL COMMENT '是否关单' DEFAULT 0, `created_at` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), `updated_at` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), `is_valid` BOOL NOT NULL COMMENT '是否有效' DEFAULT 1, `is_active` BOOL NOT NULL COMMENT '是否删除' DEFAULT 1, `owner_id` CHAR(36) COMMENT '订单所有人', CONSTRAINT `fk_Orders_users_f7640be8` FOREIGN KEY (`owner_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ) CHARACTER SET utf8mb4 COMMENT='订单表'; CREATE INDEX `numidx` ON `Orders` (`num`); CREATE INDEX `orderididx` ON `Orders` (`orderid`); CREATE INDEX `order_ordertimeidx` ON `Orders` (`ordertime`); CREATE INDEX `order_is_canceledidx` ON `Orders` (`is_canceled`); CREATE INDEX `is_doneidx` ON `Orders` (`is_done`); CREATE INDEX `is_finishidx` ON `Orders` (`is_finish`); CREATE INDEX `is_failedidx` ON `Orders` (`is_failed`); CREATE INDEX `is_valididx` ON `Orders` (`is_valid`); CREATE INDEX `is_activeidx` ON `Orders` (`is_active`); CREATE TABLE IF NOT EXISTS `Subtasks` ( `id` CHAR(36) NOT NULL PRIMARY KEY, `num` VARCHAR(255) COMMENT '短编号', `orderid` VARCHAR(255) COMMENT '中控系统订单编号', `sequence` INT NOT NULL COMMENT '管理员手动排序号' DEFAULT 0, `action` INT NOT NULL COMMENT '1: 归还, 3: 预约领用, 5: 现场领用' DEFAULT 0, `ordertime` DATETIME(6) COMMENT '预约领用时间', `name` VARCHAR(255) COMMENT '试剂名称', `typetask` INT NOT NULL COMMENT '1: 标准品A, 3: 标准品B, 5: 标准品C, 7: 标准品D, 9:非标准品' DEFAULT 1, `quantity` INT NOT NULL COMMENT '试剂数量' DEFAULT 0, `coordinates` VARCHAR(255) COMMENT '仓库编号', `traynum` VARCHAR(255) COMMENT '托盘编号', `is_canceled` BOOL NOT NULL COMMENT '是否取消' DEFAULT 0, `cancel_time` DATETIME(6) COMMENT '取消时间', `is_done` BOOL NOT NULL COMMENT '是否完成' DEFAULT 0, `created_at` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), `updated_at` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), `is_valid` BOOL NOT NULL COMMENT '是否有效' DEFAULT 1, `is_active` BOOL NOT NULL COMMENT '是否删除' DEFAULT 1, `owner_id` CHAR(36) COMMENT '订单所有人', CONSTRAINT `fk_Subtasks_users_d7bbd97e` FOREIGN KEY (`owner_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ) CHARACTER SET utf8mb4 COMMENT='子任务表'; CREATE INDEX `numidx` ON `Subtasks` (`num`); CREATE INDEX `orderididx` ON `Subtasks` (`orderid`); CREATE INDEX `subtask_ordertimeidx` ON `Subtasks` (`ordertime`); CREATE INDEX `subtask_is_canceledidx` ON `Subtasks` (`is_canceled`); CREATE INDEX `subtask_is_doneidx` ON `Subtasks` (`is_done`); CREATE INDEX `subtask_coordinatesidx` ON `Subtasks` (`coordinates`); CREATE INDEX `subtask_traynumidx` ON `Subtasks` (`traynum`); CREATE INDEX `is_valididx` ON `Subtasks` (`is_valid`); CREATE INDEX `is_activeidx` ON `Subtasks` (`is_active`); CREATE TABLE IF NOT EXISTS `Tasks` ( `id` CHAR(36) NOT NULL PRIMARY KEY, `num` VARCHAR(255) COMMENT '短编号', `orderid` VARCHAR(255) COMMENT '中控系统订单编号', `sequence` INT NOT NULL COMMENT '管理员手动排序号' DEFAULT 0, `action` INT NOT NULL COMMENT '1: 归还, 3: 预约领用, 5: 现场领用' DEFAULT 0, `ordertime` DATETIME(6) COMMENT '预约领用时间', `name` VARCHAR(255) COMMENT '试剂名称', `typetask` INT NOT NULL COMMENT '1: 标准品A, 3: 标准品B, 5: 标准品C, 7: 标准品D, 9:非准品' DEFAULT 1, `quantity` INT NOT NULL COMMENT '试剂数量' DEFAULT 0, `coordinates` VARCHAR(255) COMMENT '仓库编号', `traynum` VARCHAR(255) COMMENT '托盘编号', `is_canceled` BOOL NOT NULL COMMENT '是否取消' DEFAULT 0, `cancel_time` DATETIME(6) COMMENT '取消时间', `is_done` BOOL NOT NULL COMMENT '是否完成' DEFAULT 0, `created_at` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), `updated_at` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), `is_valid` BOOL NOT NULL COMMENT '是否有效' DEFAULT 1, `is_active` BOOL NOT NULL COMMENT '是否删除' DEFAULT 1, `owner_id` CHAR(36) COMMENT '订单所有人', CONSTRAINT `fk_Tasks_users_ce59de8c` FOREIGN KEY (`owner_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ) CHARACTER SET utf8mb4 COMMENT='任务表'; CREATE INDEX `numidx` ON `Tasks` (`num`); CREATE INDEX `orderididx` ON `Tasks` (`orderid`); CREATE INDEX `task_ordertimeidx` ON `Tasks` (`ordertime`); CREATE INDEX `task_is_canceledidx` ON `Tasks` (`is_canceled`); CREATE INDEX `task_is_doneidx` ON `Tasks` (`is_done`); CREATE INDEX `task_coordinatesidx` ON `Tasks` (`coordinates`); CREATE INDEX `task_traynumidx` ON `Tasks` (`traynum`); CREATE INDEX `is_valididx` ON `Tasks` (`is_valid`); CREATE INDEX `is_activeidx` ON `Tasks` (`is_active`); CREATE TABLE IF NOT EXISTS `Vacancys` ( `id` CHAR(36) NOT NULL PRIMARY KEY, `number` VARCHAR(255) COMMENT '空位编号', `traynum` VARCHAR(255) COMMENT '托盘编号', `orderids` JSON COMMENT '托盘编号对应的订单号列表', `memo` JSON COMMENT '备忘录', `is_shelf` BOOL NOT NULL COMMENT '是货架库存' DEFAULT 0, `is_connect` BOOL NOT NULL COMMENT '是接驳区库存' DEFAULT 0, `created_at` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), `updated_at` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), `is_valid` BOOL NOT NULL COMMENT '是否取消' DEFAULT 1, `is_active` BOOL NOT NULL COMMENT '是否删除' DEFAULT 1 ) CHARACTER SET utf8mb4 COMMENT='暂存货架或接驳机空位编号表'; CREATE INDEX `numberidx` ON `Vacancys` (`number`); CREATE INDEX `traynumidx` ON `Vacancys` (`traynum`); CREATE INDEX `is_shelfidx` ON `Vacancys` (`is_shelf`); CREATE INDEX `is_connectidx` ON `Vacancys` (`is_connect`); CREATE INDEX `is_valididx` ON `Vacancys` (`is_valid`); CREATE INDEX `is_activeidx` ON `Vacancys` (`is_active`); CREATE TABLE IF NOT EXISTS `Warehouses` ( `id` CHAR(36) NOT NULL PRIMARY KEY, `num` VARCHAR(255) COMMENT '短编号', `name` VARCHAR(255) COMMENT '仓库编号', `memo` JSON COMMENT '备忘录', `created_at` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), `updated_at` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), `is_valid` BOOL NOT NULL COMMENT '是否有效' DEFAULT 1, `is_active` BOOL NOT NULL COMMENT '是否删除' DEFAULT 1 ) CHARACTER SET utf8mb4 COMMENT='仓库管理表'; CREATE INDEX `nameidx` ON `Warehouses` (`name`); CREATE INDEX `numidx` ON `Warehouses` (`num`); CREATE INDEX `is_valididx` ON `Warehouses` (`is_valid`); CREATE INDEX `is_activeidx` ON `Warehouses` (`is_active`); CREATE TABLE IF NOT EXISTS `Connections_Vacancys` ( `Connections_id` CHAR(36) NOT NULL, `vacancy_id` CHAR(36) NOT NULL, FOREIGN KEY (`Connections_id`) REFERENCES `Connections` (`id`) ON DELETE CASCADE, FOREIGN KEY (`vacancy_id`) REFERENCES `Vacancys` (`id`) ON DELETE CASCADE ) CHARACTER SET utf8mb4; CREATE TABLE IF NOT EXISTS `Schelves_Vacancys` ( `Schelves_id` CHAR(36) NOT NULL, `vacancy_id` CHAR(36) NOT NULL, FOREIGN KEY (`Schelves_id`) REFERENCES `Schelves` (`id`) ON DELETE CASCADE, FOREIGN KEY (`vacancy_id`) REFERENCES `Vacancys` (`id`) ON DELETE CASCADE ) CHARACTER SET utf8mb4; CREATE TABLE IF NOT EXISTS `Assignments_Subtasks` ( `Assignments_id` CHAR(36) NOT NULL, `subtask_id` CHAR(36) NOT NULL, FOREIGN KEY (`Assignments_id`) REFERENCES `Assignments` (`id`) ON DELETE CASCADE, FOREIGN KEY (`subtask_id`) REFERENCES `Subtasks` (`id`) ON DELETE CASCADE ) CHARACTER SET utf8mb4; CREATE TABLE IF NOT EXISTS `Orders_Tasks` ( `Orders_id` CHAR(36) NOT NULL, `task_id` CHAR(36) NOT NULL, FOREIGN KEY (`Orders_id`) REFERENCES `Orders` (`id`) ON DELETE CASCADE, FOREIGN KEY (`task_id`) REFERENCES `Tasks` (`id`) ON DELETE CASCADE ) CHARACTER SET utf8mb4; CREATE TABLE IF NOT EXISTS `Tasks_Subtasks` ( `Tasks_id` CHAR(36) NOT NULL, `subtask_id` CHAR(36) NOT NULL, FOREIGN KEY (`Tasks_id`) REFERENCES `Tasks` (`id`) ON DELETE CASCADE, FOREIGN KEY (`subtask_id`) REFERENCES `Subtasks` (`id`) ON DELETE CASCADE ) CHARACTER SET utf8mb4; CREATE TABLE IF NOT EXISTS `Warehouses_Schelves` ( `Warehouses_id` CHAR(36) NOT NULL, `schelve_id` CHAR(36) NOT NULL, FOREIGN KEY (`Warehouses_id`) REFERENCES `Warehouses` (`id`) ON DELETE CASCADE, FOREIGN KEY (`schelve_id`) REFERENCES `Schelves` (`id`) ON DELETE CASCADE ) CHARACTER SET utf8mb4;""" async def downgrade(db: BaseDBAsyncClient) -> str: return """ """