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