package BaseMenuDao import ( "dsBaseRpc/RpcService/BaseMenu/BaseMenuProto" "dsBaseRpc/Utils/CommonUtil" "dsBaseRpc/Utils/DbUtil" "dsBaseRpc/Utils/SqlKit" "dsBaseRpc/models" "errors" "github.com/xormplus/builder" "strings" ) var db = DbUtil.Engine //批量增加 func AddBaseMenu(ms models.TBaseMenu) (int64, error) { return db.Insert(ms) } //获取同一个parentId下的最大排序号 func GetMaxSortId(parentId string) (int64, error) { sql := `select max(sort_id)+1 as sort_id from t_base_menu where b_use=1 and parent_id=?` list, err := db.SQL(sql, parentId).Query().List() if err != nil { return 0, err } if len(list) == 0 { return 0, errors.New("查询最大排序号时失败!") } return list[0]["sort_id"].(int64), nil } //检查一个菜单编码是不是已存在 func ExistMenuCode(menuCode string) (bool, error) { sql := `select count(1) as c from t_base_menu where b_use=1 and menu_code=?` list, err := db.SQL(sql, menuCode).Query().List() if err != nil { return false, err } c := list[0]["c"].(int64) if c == 0 { return false, nil } else { return true, nil } } //更新 func UpdateBaseMenu(model models.TBaseMenu, ForceUpdateFields []string) (int64, error) { //1、清除Redis缓存 var ids = []string{model.MenuId} var selector = SqlKit.GetBean("t_base_menu") SqlKit.DeleteCacheByIds(ids, selector) //2、计算本次操作,有哪些字段需要更新 NeedUpdateFields := CommonUtil.GetNeedUpdateFields(model) //3、合并强制更新的字段 ForceUpdateFields = append(ForceUpdateFields, NeedUpdateFields...) //4、去重 ForceUpdateFields = CommonUtil.RemoveDuplicatesAndEmpty(ForceUpdateFields) //5、更新操作,强制更新这些列 affected, err := db.ID(model.MenuId).Cols(ForceUpdateFields...).Update(model) return affected, err } //分页查询 func PageBaseMenu(in *BaseMenuProto.QueryArg) ([]map[string]interface{}, int32, error) { //判断这个in.AppId是不是已经在t_base_menu中存在根,如果没有,需要先创建 sql := `select count(1) as c from t_base_menu where b_use=1 and app_id=? and identity_id=? and parent_id='00000000-0000-0000-0000-000000000000'` list, err := db.SQL(sql, in.AppId, in.IdentityId).Query().List() if err != nil { return nil, 0, err } c := list[0]["c"].(int64) if c == 0 { sql = `select * from t_app_base where app_id=? and b_use=1` list2, err := db.SQL(sql, in.AppId).Query().List() if err != nil { return nil, 0, err } var appName string if len(list2) == 0 { return nil, 0, errors.New("没有找到合法的app_id") } else { appName = list2[0]["app_name"].(string) } //创建 var model = new(models.TBaseMenu) model.MenuId = CommonUtil.GetUUID() model.AppId = in.AppId model.ParentId = "00000000-0000-0000-0000-000000000000" model.IdentityId = in.IdentityId model.MenuName = appName model.MenuCode = "" model.MenuUrl = "#" model.MenuIcon = "" model.SortId = 1 model.BUse = 1 //插入 _, err = db.Insert(model) if err != nil { return nil, 0, err } } //接收传入参数 var myBuilder = builder.Dialect(builder.MYSQL).Select("t1.*").From("t_base_menu as t1") myBuilder.And(builder.Eq{"t1.app_id": in.AppId}) myBuilder.And(builder.Eq{"t1.identity_id": in.IdentityId}) //获取拼接完成的SQL语句 sql, err = myBuilder.OrderBy("t1.sort_id").ToBoundSQL() if err != nil { return nil, 0, err } //调用多查询字段通用方法 list, count, err := SqlKit.Query(sql) return list, count, err } //调整菜单的排序号,direction=1向上,drection=2向下 func SetMenuSort(in *BaseMenuProto.SetMenuSortArg) (bool, error) { if in.Direction != 1 && in.Direction != 2 { return false, errors.New("传入调整方向有误,向上1,向下2,传入值不正确!") } //查找当前menu的sort_id list := SqlKit.QueryByIds([]string{in.MenuId}, "t_base_role_menu") if len(list) == 0 { return false, errors.New("没有找到对应的menu_id!") } parentId := list[0]["parent_id"].(string) sortId := list[0]["sort_id"].(int32) sql := `select menu_id,sort_id from t_base_menu where parent_id=? and sort_id#? order sort_id limit 1` if in.Direction == 1 { sql = strings.Replace(sql, "#", "<", -1) } else { sql = strings.Replace(sql, "#", ">", -1) } list2, err := db.SQL(sql, parentId, sortId).Query().List() if err != nil { return false, err } if len(list2) == 0 { return true, nil } //目标替换对象 menuId2 := list2[0]["menu_id"].(string) sortId2 := list2[0]["sort_id"].(int32) //更新 //1、清除Redis缓存 var ids = []string{in.MenuId, menuId2} var selector = SqlKit.GetBean("t_base_menu") SqlKit.DeleteCacheByIds(ids, selector) sql = `update t_base_menu set sort_id=? where menu_id=?` db.SQL(sql, sortId2, in.MenuId).Execute() db.SQL(sql, sortId, menuId2).Execute() return true, nil }