123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- 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
- }
|