main.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package main
  2. import (
  3. "cicv-data-closedloop/amd64/web_server/handler"
  4. "cicv-data-closedloop/common/config/c_db"
  5. "cicv-data-closedloop/common/config/c_log"
  6. "cicv-data-closedloop/common/gin/middleware"
  7. _ "embed"
  8. "github.com/gin-gonic/gin"
  9. "gopkg.in/yaml.v2"
  10. _ "gopkg.in/yaml.v3"
  11. "os"
  12. )
  13. type ApplicationYamlStruct struct {
  14. ApplicationName string `yaml:"application"`
  15. Web struct {
  16. Port string `yaml:"port"`
  17. RoutePrefix string `yaml:"route-prefix"`
  18. Token string `yaml:"token"`
  19. WhiteList []string `yaml:"white-list"`
  20. } `yaml:"web"`
  21. Log struct {
  22. Dir string `yaml:"dir"`
  23. Prefix string `yaml:"prefix"`
  24. } `yaml:"log"`
  25. Mysql struct {
  26. Ip string `yaml:"ip"`
  27. Port string `yaml:"port"`
  28. Username string `yaml:"username"`
  29. Password string `yaml:"password"`
  30. Dbname string `yaml:"dbname"`
  31. Charset string `yaml:"charset"`
  32. SqlfileDir string `yaml:"sqlfile-dir"`
  33. } `yaml:"mysql"`
  34. }
  35. var (
  36. //go:embed application.yaml
  37. applicationYamlBytes []byte
  38. ApplicationYaml ApplicationYamlStruct
  39. )
  40. func init() {
  41. // 解析YAML内容
  42. _ = yaml.Unmarshal(applicationYamlBytes, &ApplicationYaml)
  43. c_log.InitLog(
  44. ApplicationYaml.Log.Dir,
  45. ApplicationYaml.Log.Prefix,
  46. )
  47. c_db.InitSqlxMysql(
  48. ApplicationYaml.Mysql.Username,
  49. ApplicationYaml.Mysql.Password,
  50. ApplicationYaml.Mysql.Ip,
  51. ApplicationYaml.Mysql.Port,
  52. ApplicationYaml.Mysql.Dbname,
  53. ApplicationYaml.Mysql.Charset,
  54. )
  55. c_db.InitSqlFilesMap(ApplicationYaml.Mysql.SqlfileDir)
  56. }
  57. func main() {
  58. c_log.GlobalLogger.Info("配置文件为:", ApplicationYaml)
  59. // 创建 gin 实例
  60. router := gin.Default()
  61. // 使用中间件
  62. router.Use(middleware.Cors()) // 解决cors
  63. router.Use(middleware.LogRequest()) // 请求日志打印
  64. router.Use(middleware.ValidateHeaders(ApplicationYaml.Web.WhiteList, ApplicationYaml.Web.Token)) // 全局请求头校验
  65. // 通过路由组设置全局前缀
  66. projectPrefix := router.Group(ApplicationYaml.Web.RoutePrefix)
  67. examPrefix := projectPrefix.Group("/exam")
  68. examPrefix.POST("/tick", handler.Tick) // 考试开始
  69. go handler.ExamEndTicker() // 考试结束
  70. examPrefix.POST("/begin", handler.Begin) // 考试开始2
  71. examPrefix.POST("/end", handler.End) // 考试结束2
  72. examPrefix.POST("/page", handler.Page) // 分页查询
  73. examPrefix.POST("/report", handler.Report) // pdf下载
  74. monitorPrefix := projectPrefix.Group("/monitor")
  75. monitorPrefix.POST("/insert", handler.SaveDeviceMonitor)
  76. // 端口
  77. err := router.Run(":" + ApplicationYaml.Web.Port)
  78. if err != nil {
  79. c_log.GlobalLogger.Error("程序崩溃,监听端口 "+ApplicationYaml.Web.Port+" 失败:", err)
  80. os.Exit(-1)
  81. }
  82. }