package BasePurviewDao import ( "dsBaseRpc/RpcService/BasePurview/BasePurviewProto" "dsBaseRpc/Utils/CommonUtil" "dsBaseRpc/Utils/DbUtil" "dsBaseRpc/Utils/SqlKit" "dsBaseRpc/models" "github.com/xormplus/builder" ) //操作数据库的变量 var db = DbUtil.Engine //增加 func AddBasePurview(model models.TBasePurview) (int64, error) { return db.Insert(model) } //修改 func UpdateBasePurview(model models.TBasePurview, ForceUpdateFields []string) (int64, error) { //1、清除Redis缓存 var ids = []string{model.PurviewId} var selector = SqlKit.GetBean("t_base_purview") SqlKit.DeleteCacheByIds(ids, selector) //2、计算本次操作,有哪些字段需要更新 NeedUpdateFields := CommonUtil.GetNeedUpdateFields(model) //3、合并强制更新的字段 ForceUpdateFields = append(ForceUpdateFields, NeedUpdateFields...) //4、去重 ForceUpdateFields = CommonUtil.RemoveDuplicatesAndEmpty(ForceUpdateFields) //更改排序号 //(1)权限排序号的范围是parent_id var myBuilder = builder.Dialect(builder.MYSQL).Select("purview_id").From("t_base_purview") //(2)查询获取到parent_id var m1 models.TBasePurview db.ID(model.PurviewId).Get(&m1) //组装sql sql, _ := myBuilder.Where(builder.Eq{"parent_id": m1.ParentId}).And(builder.Gte{"sort_id": model.SortId}).And(builder.Neq{"purview_id": model.PurviewId}).OrderBy("sort_id").ToBoundSQL() list, _ := db.SQL(sql).Query().List() //事务声明 session := db.NewSession() defer session.Close() session.Begin() //事务的内容 for i := range list { u := new(models.TBasePurview) u.SortId = model.SortId + int32(i+1) id := list[i]["purview_id"] _, err := session.ID(id).Update(u) if err != nil { session.Rollback() return 0, err } } //事务提交 err := session.Commit() if err != nil { return 0, err } //通过添加Cols函数指定需要更新结构体中的哪些值,未指定的将不更新,指定了的即使为0也会更新。 return db.Where("purview_id = ?", model.PurviewId).Cols(ForceUpdateFields...).Update(model) } //人员有哪些角色 func GetRoleInfoByPersonId(personId string) ([]map[string]interface{}, error) { var myBuilder = builder.Dialect(builder.MYSQL).Select("id").From("t_base_role_person") sql, _ := myBuilder.Where(builder.Eq{"person_id": personId}).ToBoundSQL() list, _, err := SqlKit.Query(sql) return list, err } //指定的角色数组中有哪些权限 func GetPurviewByRoleArray(roleArray []string) ([]map[string]interface{}, error) { var myBuilder = builder.Dialect(builder.MYSQL).Select("id").From("t_base_purview_role") sql, _ := myBuilder.Where(builder.In("role_id", roleArray)).ToBoundSQL() list, _, err := SqlKit.Query(sql) return list, err } //分页查询 func PageBasePurview(in *BasePurviewProto.QueryArg) ([]map[string]interface{}, int32, error) { //接收传入参数 var limit = int(in.Limit) var offset = int((in.Page - 1) * in.Limit) var myBuilder = builder.Dialect(builder.MYSQL).Select("purview_id").From("t_base_purview") //人员id if in.PersonId != "" { //角色列表 _roleList, _ := GetRoleInfoByPersonId(in.PersonId) //角色数组 roleArray := CommonUtil.ConvertSqlListToArray(_roleList, "role_id") //通过角色,获取权限列表 _purviewList, _ := GetPurviewByRoleArray(roleArray) //转为权限数组 purviewArray := CommonUtil.ConvertSqlListToArray(_purviewList, "purview_id") //添加上这个IN的条件集合 myBuilder.Where(builder.In("purview_id", purviewArray)) } //业务系统编码 myBuilder.Where(builder.Eq{"business_code": in.BusinessCode}) //获取拼接完成的SQL语句 sql, _ := myBuilder.OrderBy("sort_id asc").Limit(limit, offset).ToBoundSQL() //通过SQL获取带缓存的数据 return SqlKit.Query(sql) }