调整代码结构，修正一些bug