package init_serve import ( "eta/eta_menu_sync/global" "eta/eta_menu_sync/models" "eta/eta_menu_sync/utils" "fmt" "os" "strings" "time" ) func InitTask() { fmt.Println("开始执行生成sql语句") etaBusinessObj := models.EtaBusiness{} list, err := etaBusinessObj.GetAllEtaBusiness() if err != nil { fmt.Println("err:", err) return } dateDir := time.Now().Format("20060102") baseDir := global.CONFIG.Serve.StaticDir + "menu" + dateDir + "" err = os.MkdirAll(baseDir, 0766) if err != nil { fmt.Println("存储目录创建失败,Err:" + err.Error()) return } etaBusinessMenuObj := models.EtaBusinessMenu{} for _, v := range list { menuList, tmpErr := etaBusinessMenuObj.GetMenuList(v.BusinessCode) if tmpErr != nil { fmt.Println(v.BusinessName, "生成失败,err:", tmpErr) continue } if len(menuList) <= 0 { fmt.Println(v.BusinessName, "生成失败,没有配置菜单") continue } tableName := fmt.Sprintf("sys_menu_%s_bak", time.Now().Format(utils.FormatDateUnSpace)) sqlStr := "# 备份表\n# create table " + tableName + " like sys_menu;\n# insert into " + tableName + " select * from sys_menu;\n\n" sqlStr += getFront(v.DbType) tableKey := "" modeName := `` switch v.DbType { case 1: // dm tableKey = `"` modeName = `eta_master.` default: // 默认mysql tableKey = "`" } 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 " sqlStr = strings.Replace(sqlStr, "`", tableKey, -1) sqlStr += getMenuStr(menuList, v.DbType) sqlStr += getEndSql(v.DbType) err = writeFile(baseDir, sqlStr, v) if err != nil { fmt.Println(v.BusinessName, "生成失败,文件写入失败,Err:", err) continue } } fmt.Println("生成完成") } func getFront(dbType int) string { switch dbType { case 0: // mysql return `` case 1: return "SET IDENTITY_INSERT eta_master.sys_menu ON;\n" } return `` } // getEndSql // @Description: 获取结束的sql // @author: Roc // @datetime 2025-06-03 16:11:30 // @param dbType int // @return string func getEndSql(dbType int) string { switch dbType { case 0: // mysql 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;" case 1: 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" } return `` } func getMenuStr(menuList []*models.EtaBusinessMenu, dbType int) (str string) { tableKey := "" switch dbType { case 1: // dm tableKey = `'` default: // 默认mysql tableKey = `"` } menuStrList := []string{} for _, v := range menuList { tmpStr := fmt.Sprintf(`(%d, %d, "%s", %d, "%s","%s", "%s",%d, %d, "%s", %d, "%s", "%s", "%s", "%s", "%s")`, 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) tmpStr = strings.Replace(tmpStr, `"`, tableKey, -1) menuStrList = append(menuStrList, tmpStr) } str = strings.Join(menuStrList, ",\n") str += ";\n" return } // writeFile 文件写入 func writeFile(baseDir, str string, etaBusiness *models.EtaBusiness) (err error) { 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) if err != nil { fmt.Println(err) return } defer file.Close() _, err = file.Write([]byte(str)) if err != nil { return } return }