重构了代码，还有些bug，