main.go 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  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. // 道具列表
  97. func BeegoItemNameList(items []int) string {
  98. cnt := ""
  99. for _, v := range items {
  100. if cnt != "" {
  101. cnt += ","
  102. }
  103. cnt += fmt.Sprintf("%s", models.GetItemName(v))
  104. }
  105. return cnt
  106. }
  107. // 初始化beego fun
  108. func initBeegoFunMap() {
  109. beego.AddFuncMap("TimeToStr", TimeToStr)
  110. beego.AddFuncMap("GetSelectStatus", GetSelectStatus)
  111. beego.AddFuncMap("ServerStatus", ServerStatus)
  112. beego.AddFuncMap("PermissionToStr", PermissionToStr)
  113. beego.AddFuncMap("GetRoleNameById", GetRoleNameById)
  114. beego.AddFuncMap("TimeCmdOperate", TimeCmdOperate)
  115. beego.AddFuncMap("TimeCmdOperateStatus", TimeCmdOperateStatus)
  116. beego.AddFuncMap("WeightItems", WeightItems)
  117. beego.AddFuncMap("BeegoItemNameList", BeegoItemNameList)
  118. }
  119. func main() {
  120. //系统第一次初始化需要先运行init
  121. if len(os.Args) > 1 && os.Args[1] == "init" {
  122. initDb()
  123. return
  124. }
  125. //当有新数据结构,或者数据结构有变更,需要先运行patch
  126. if len(os.Args) > 1 && os.Args[1] == "patch" {
  127. patchDb()
  128. return
  129. }
  130. utils.InitProject()
  131. utils.InitRedis()
  132. // 注册sqlite
  133. orm.RegisterDriver("sqlite3", orm.DRSqlite)
  134. orm.RegisterDataBase("default", "sqlite3", dsn)
  135. orm.RegisterDataBase("admin", "sqlite3", dsn)
  136. go backup.Init_backup_event_proc()
  137. // 初始化数据
  138. models.InitHotfixInfo()
  139. models.InitBanIPInfo()
  140. models.InitExchangeCodeInfo()
  141. models.UpdateItemConfig()
  142. models.UpdateGoodsConfig()
  143. models.InitRollAwardInfo()
  144. //模板初始化
  145. initBeegoFunMap()
  146. beego.SetLevel(beego.LevelInformational)
  147. beego.Run()
  148. }
  149. func initDb() {
  150. os.Remove(dsn)
  151. orm.RegisterDriver("sqlite3", orm.DRSqlite)
  152. orm.RegisterDataBase("default", "sqlite3", dsn)
  153. orm.RegisterDataBase("admin", "sqlite3", dsn)
  154. db, err := sql.Open("sqlite3", dsn)
  155. if err != nil {
  156. panic(err.Error())
  157. }
  158. r, err := db.Exec("create table init (n varchar(32));drop table init;")
  159. if err != nil {
  160. log.Println(err)
  161. log.Println(r)
  162. } else {
  163. log.Println("Database ", " created")
  164. }
  165. o := orm.NewOrm()
  166. o.Using("admin")
  167. orm.RunSyncdb("admin", true, true)
  168. u := new(models.User)
  169. u.Username = "admin"
  170. u.Role = 1
  171. u.Password = utils.Strtomd5("000000")
  172. u.CreateTs = time.Now().Unix()
  173. u.LastLoginTs = time.Now().Unix()
  174. o.Insert(u)
  175. role := new(models.Role)
  176. role.Name = "管理员"
  177. role.Permission = 0xFFFFFFFF
  178. o.Insert(role)
  179. time.Sleep(10000)
  180. }
  181. func patchDb() {
  182. orm.RegisterDriver("sqlite3", orm.DRSqlite)
  183. orm.RegisterDataBase("default", "sqlite3", dsn)
  184. orm.RegisterDataBase("admin", "sqlite3", dsn)
  185. //force - drop table 后再建表
  186. orm.RunSyncdb("admin", false, true)
  187. // o := orm.NewOrm()
  188. // o.Insert(&models.SystemParameter{Key: "test_server", Value: ""})
  189. // o.Insert(&models.SystemParameter{Key: "game_server", Value: ""})
  190. }