main.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. package main
  2. import (
  3. "box-gm/utils"
  4. "fmt"
  5. "github.com/astaxie/beego"
  6. // "github.com/drone/routes"
  7. "box-gm/backup"
  8. "box-gm/models"
  9. _ "box-gm/routers"
  10. "database/sql"
  11. "log"
  12. "os"
  13. "time"
  14. "github.com/astaxie/beego/orm"
  15. _ "github.com/go-sql-driver/mysql"
  16. _ "github.com/mattn/go-sqlite3"
  17. )
  18. var dsn = "./admin.db"
  19. func init() {
  20. //会话保存到文件中
  21. beego.BConfig.WebConfig.Session.SessionOn = true
  22. }
  23. func TimeToStr(i int64) string {
  24. if i == int64(0) {
  25. return ""
  26. }
  27. return time.Unix(int64(i), 0).Format("2006-01-02 15:04:05")
  28. }
  29. func GetSelectStatus(id1 int64, id2 int64) string {
  30. log.Printf("GetSelectStatus id1[%d] id2[%d]", id1, id2)
  31. if id1 == id2 {
  32. return "selected"
  33. }
  34. return ""
  35. }
  36. // 服务器状态
  37. func ServerStatus(s int) string {
  38. if s == 1 {
  39. return "正在运行"
  40. }
  41. if s == 0 {
  42. return "已停止"
  43. }
  44. return ""
  45. }
  46. func PermissionToStr(n int64) string {
  47. ret := ""
  48. p := models.GetPermissions()
  49. for i := 0; i < len(p); i++ {
  50. if (n & (1 << uint(p[i].Id))) != 0 {
  51. if ret == "" {
  52. ret = p[i].Name
  53. } else {
  54. ret = ret + " | " + p[i].Name
  55. }
  56. }
  57. }
  58. return ret
  59. }
  60. func GetRoleNameById(id int64) string {
  61. role := models.GetRoleById(id)
  62. if role == nil {
  63. return ""
  64. }
  65. return role.Name
  66. }
  67. func TimeCmdOperate(s int) string {
  68. if s == 1 {
  69. return "关闭登录"
  70. }
  71. if s == 2 {
  72. return "合服"
  73. }
  74. return ""
  75. }
  76. func TimeCmdOperateStatus(s int) string {
  77. if s == 0 {
  78. return "未执行"
  79. }
  80. if s == 1 {
  81. return "已执行"
  82. }
  83. return ""
  84. }
  85. // 权重物品列表
  86. func WeightItems(items []*models.ExchangeItemsInfo) string {
  87. cnt := ""
  88. for _, v := range items {
  89. if cnt != "" {
  90. cnt += "|"
  91. }
  92. cnt += fmt.Sprintf("%s%d,权重:%d", models.GetItemName(v.ItemId), v.Count, v.Weight)
  93. }
  94. return cnt
  95. }
  96. // 初始化beego fun
  97. func initBeegoFunMap() {
  98. beego.AddFuncMap("TimeToStr", TimeToStr)
  99. beego.AddFuncMap("GetSelectStatus", GetSelectStatus)
  100. beego.AddFuncMap("ServerStatus", ServerStatus)
  101. beego.AddFuncMap("PermissionToStr", PermissionToStr)
  102. beego.AddFuncMap("GetRoleNameById", GetRoleNameById)
  103. beego.AddFuncMap("TimeCmdOperate", TimeCmdOperate)
  104. beego.AddFuncMap("TimeCmdOperateStatus", TimeCmdOperateStatus)
  105. beego.AddFuncMap("WeightItems", WeightItems)
  106. }
  107. func main() {
  108. //系统第一次初始化需要先运行init
  109. if len(os.Args) > 1 && os.Args[1] == "init" {
  110. initDb()
  111. return
  112. }
  113. //当有新数据结构,或者数据结构有变更,需要先运行patch
  114. if len(os.Args) > 1 && os.Args[1] == "patch" {
  115. patchDb()
  116. return
  117. }
  118. utils.InitProject()
  119. utils.InitRedis()
  120. // 注册sqlite
  121. orm.RegisterDriver("sqlite3", orm.DRSqlite)
  122. orm.RegisterDataBase("default", "sqlite3", dsn)
  123. orm.RegisterDataBase("admin", "sqlite3", dsn)
  124. go backup.Init_backup_event_proc()
  125. // 初始化数据
  126. models.InitHotfixInfo()
  127. models.InitBanIPInfo()
  128. models.InitExchangeCodeInfo()
  129. //模板初始化
  130. initBeegoFunMap()
  131. beego.SetLevel(beego.LevelInformational)
  132. beego.Run()
  133. }
  134. func initDb() {
  135. os.Remove(dsn)
  136. orm.RegisterDriver("sqlite3", orm.DRSqlite)
  137. orm.RegisterDataBase("default", "sqlite3", dsn)
  138. orm.RegisterDataBase("admin", "sqlite3", dsn)
  139. db, err := sql.Open("sqlite3", dsn)
  140. if err != nil {
  141. panic(err.Error())
  142. }
  143. r, err := db.Exec("create table init (n varchar(32));drop table init;")
  144. if err != nil {
  145. log.Println(err)
  146. log.Println(r)
  147. } else {
  148. log.Println("Database ", " created")
  149. }
  150. o := orm.NewOrm()
  151. o.Using("admin")
  152. orm.RunSyncdb("admin", true, true)
  153. u := new(models.User)
  154. u.Username = "admin"
  155. u.Role = 1
  156. u.Password = utils.Strtomd5("000000")
  157. u.CreateTs = time.Now().Unix()
  158. u.LastLoginTs = time.Now().Unix()
  159. o.Insert(u)
  160. role := new(models.Role)
  161. role.Name = "管理员"
  162. role.Permission = 0xFFFFFFFF
  163. o.Insert(role)
  164. time.Sleep(10000)
  165. }
  166. func patchDb() {
  167. orm.RegisterDriver("sqlite3", orm.DRSqlite)
  168. orm.RegisterDataBase("default", "sqlite3", dsn)
  169. orm.RegisterDataBase("admin", "sqlite3", dsn)
  170. //force - drop table 后再建表
  171. orm.RunSyncdb("admin", false, true)
  172. // o := orm.NewOrm()
  173. // o.Insert(&models.SystemParameter{Key: "test_server", Value: ""})
  174. // o.Insert(&models.SystemParameter{Key: "game_server", Value: ""})
  175. }