You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

110 lines
3.7 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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