task.go 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. package init_serve
  2. import (
  3. "eta/eta_menu_sync/global"
  4. "eta/eta_menu_sync/models"
  5. "eta/eta_menu_sync/utils"
  6. "fmt"
  7. "os"
  8. "strings"
  9. "time"
  10. )
  11. func InitTask() {
  12. fmt.Println("开始执行生成sql语句")
  13. etaBusinessObj := models.EtaBusiness{}
  14. list, err := etaBusinessObj.GetAllEtaBusiness()
  15. if err != nil {
  16. fmt.Println("err:", err)
  17. return
  18. }
  19. dateDir := time.Now().Format("20060102")
  20. baseDir := global.CONFIG.Serve.StaticDir + "menu" + dateDir + ""
  21. err = os.MkdirAll(baseDir, 0766)
  22. if err != nil {
  23. fmt.Println("存储目录创建失败,Err:" + err.Error())
  24. return
  25. }
  26. etaBusinessMenuObj := models.EtaBusinessMenu{}
  27. for _, v := range list {
  28. menuList, tmpErr := etaBusinessMenuObj.GetMenuList(v.BusinessCode)
  29. if tmpErr != nil {
  30. fmt.Println(v.BusinessName, "生成失败,err:", tmpErr)
  31. continue
  32. }
  33. if len(menuList) <= 0 {
  34. fmt.Println(v.BusinessName, "生成失败,没有配置菜单")
  35. continue
  36. }
  37. tableName := fmt.Sprintf("sys_menu_%s_bak", time.Now().Format(utils.FormatDateUnSpace))
  38. sqlStr := "# 备份表\n# create table " + tableName + " like sys_menu;\n# insert into " + tableName + " select * from sys_menu;\n\n"
  39. sqlStr += getFront(v.DbType)
  40. tableKey := ""
  41. modeName := ``
  42. switch v.DbType {
  43. case 1: // dm
  44. tableKey = `"`
  45. modeName = `eta_master.`
  46. default:
  47. // 默认mysql
  48. tableKey = "`"
  49. }
  50. sqlStr += "delete from " + modeName + "sys_menu where 1=1;\nINSERT INTO " + modeName + "sys_menu (`menu_id`, `parent_id`, `name`, `sort`, `path`, `icon_path`, `component`, `hidden`, `is_level`, `level_path`, `menu_type`, `button_code`, `create_time`, `modify_time`,`api`,`name_en`) VALUES "
  51. sqlStr = strings.Replace(sqlStr, "`", tableKey, -1)
  52. sqlStr += getMenuStr(menuList, v.DbType)
  53. sqlStr += getEndSql(v.DbType)
  54. err = writeFile(baseDir, sqlStr, v)
  55. if err != nil {
  56. fmt.Println(v.BusinessName, "生成失败,文件写入失败,Err:", err)
  57. continue
  58. }
  59. }
  60. fmt.Println("生成完成")
  61. }
  62. func getFront(dbType int) string {
  63. switch dbType {
  64. case 0: // mysql
  65. return ``
  66. case 1:
  67. return "SET IDENTITY_INSERT eta_master.sys_menu ON;\n"
  68. }
  69. return ``
  70. }
  71. // getEndSql
  72. // @Description: 获取结束的sql
  73. // @author: Roc
  74. // @datetime 2025-06-03 16:11:30
  75. // @param dbType int
  76. // @return string
  77. func getEndSql(dbType int) string {
  78. switch dbType {
  79. case 0: // mysql
  80. return "SELECT role_id INTO @sys_id FROM sys_role WHERE role_name = 'admin';\nDELETE FROM sys_role_menu WHERE role_id = @sys_id;\nINSERT INTO sys_role_menu(`role_id`, `menu_id`, `type`)\nSELECT @sys_id, menu_id, 0 FROM sys_menu;"
  81. case 1:
  82. return "-- 定义变量\nDECLARE\n sys_id INT;\nBEGIN\n -- 查询角色ID并赋值给变量\n SELECT role_id INTO sys_id FROM eta_master.sys_role WHERE role_name = 'admin';\n\n -- 删除角色菜单关联\n DELETE FROM eta_master.sys_role_menu WHERE role_id = sys_id;\n\n -- 插入新的角色菜单关联\n INSERT INTO eta_master.sys_role_menu (role_id, menu_id, type)\n SELECT sys_id, menu_id, 0 FROM eta_master.sys_menu;\nEND;\n /\nSET IDENTITY_INSERT eta_master.sys_menu OFF;\n"
  83. }
  84. return ``
  85. }
  86. func getMenuStr(menuList []*models.EtaBusinessMenu, dbType int) (str string) {
  87. tableKey := ""
  88. switch dbType {
  89. case 1: // dm
  90. tableKey = `'`
  91. default:
  92. // 默认mysql
  93. tableKey = `"`
  94. }
  95. menuStrList := []string{}
  96. for _, v := range menuList {
  97. tmpStr := fmt.Sprintf(`(%d, %d, "%s", %d, "%s","%s", "%s",%d, %d, "%s", %d, "%s", "%s", "%s", "%s", "%s")`,
  98. v.MenuId, v.ParentId, v.Name, v.Sort, v.Path, v.IconPath, v.Component, v.Hidden, v.IsLevel, v.LevelPath, v.MenuType, v.ButtonCode, v.CreateTime.Format(utils.FormatDateTime), v.ModifyTime.Format(utils.FormatDateTime), v.Api, v.NameEn)
  99. tmpStr = strings.Replace(tmpStr, `"`, tableKey, -1)
  100. menuStrList = append(menuStrList, tmpStr)
  101. }
  102. str = strings.Join(menuStrList, ",\n")
  103. str += ";\n"
  104. return
  105. }
  106. // writeFile 文件写入
  107. func writeFile(baseDir, str string, etaBusiness *models.EtaBusiness) (err error) {
  108. file, err := os.OpenFile(baseDir+"/"+time.Now().Format(utils.FormatDateMouthDayUnSpace)+"_"+etaBusiness.BusinessName+"_"+etaBusiness.BusinessCode+".txt", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666)
  109. if err != nil {
  110. fmt.Println(err)
  111. return
  112. }
  113. defer file.Close()
  114. _, err = file.Write([]byte(str))
  115. if err != nil {
  116. return
  117. }
  118. return
  119. }