|
|
package BaseRolePersonDao
|
|
|
|
|
|
import (
|
|
|
"dsBaseRpc/Const"
|
|
|
"dsBaseRpc/RpcService/BaseRolePerson/BaseRolePersonProto"
|
|
|
"dsBaseRpc/Utils/CommonUtil"
|
|
|
"dsBaseRpc/Utils/DbUtil"
|
|
|
"dsBaseRpc/Utils/RedisUtil"
|
|
|
"dsBaseRpc/Utils/SqlKit"
|
|
|
"dsBaseRpc/models"
|
|
|
"github.com/xormplus/builder"
|
|
|
)
|
|
|
|
|
|
var db = DbUtil.Engine
|
|
|
|
|
|
//增加
|
|
|
func AddBaseRolePerson(model models.TBaseRolePerson) (int64, error) {
|
|
|
return db.Insert(model)
|
|
|
}
|
|
|
|
|
|
//修改
|
|
|
func UpdateBaseRolePerson(model models.TBaseRolePerson, ForceUpdateFields []string) (int64, error) {
|
|
|
//1、清除Redis缓存
|
|
|
var ids = []string{model.Id}
|
|
|
var selector = SqlKit.GetBean("t_base_role_person")
|
|
|
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("id").From("t_base_role_person")
|
|
|
myBuilder.ToBoundSQL()
|
|
|
//(2)查询获取到parent_id
|
|
|
var m1 models.TBaseRolePerson
|
|
|
db.ID(model.Id).Get(&m1)
|
|
|
//5、更新操作,强制更新这些列
|
|
|
affected, err := db.ID(model.Id).Cols(ForceUpdateFields...).Update(model)
|
|
|
return affected, err
|
|
|
}
|
|
|
|
|
|
//分页查询
|
|
|
func PageBaseRolePerson(in *BaseRolePersonProto.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("id").From("t_base_role_person")
|
|
|
if in.PersonId != "" {
|
|
|
myBuilder.Where(builder.Eq{"person_id": in.PersonId})
|
|
|
}
|
|
|
myBuilder.Where(builder.Eq{"b_use": 1})
|
|
|
//获取拼接完成的SQL语句
|
|
|
sql, _ := myBuilder.OrderBy("id asc").ToBoundSQL()
|
|
|
//分页
|
|
|
myBuilder.Limit(limit, offset)
|
|
|
list, count, err := SqlKit.Query(sql)
|
|
|
return list, count, err
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:传入一个单位ID,获取这个单位下,是不是存在虚拟管理员,用于判断是需要创建,还是需要开启
|
|
|
作者:黄海
|
|
|
时间:2020-05-30
|
|
|
*/
|
|
|
func VirtualManagerExist(bureauId string) (bool, string) {
|
|
|
//1、在t_base_role_person表中是不是存在?
|
|
|
success, personId := GetVirtualManager(bureauId)
|
|
|
//2、如果存在,继续检查t_base_teacher表中是不是存在这个person_id,不关心b_use,存在即可
|
|
|
if success {
|
|
|
count, _ := db.Table("t_base_teacher").Where("person_id=?", personId).Count()
|
|
|
//如果不存在
|
|
|
if count == 0 {
|
|
|
success = false
|
|
|
}
|
|
|
}
|
|
|
//3、继续检查t_sys_loginperson
|
|
|
if success {
|
|
|
count, _ := db.Table("t_sys_loginperson").Where("person_id=?", personId).Count()
|
|
|
//如果不存在
|
|
|
if count == 0 {
|
|
|
success = false
|
|
|
}
|
|
|
}
|
|
|
//4、如果最后检查不存在,那么可能是存在垃圾数据的,需要清理一遍历
|
|
|
if !success && personId != "" {
|
|
|
//清理
|
|
|
modelTeacher := new(models.TBaseTeacher)
|
|
|
db.Where("person_id=?", personId).Delete(modelTeacher)
|
|
|
modelLoginPerson := new(models.TSysLoginperson)
|
|
|
db.Where("person_id=?", personId).Delete(modelLoginPerson)
|
|
|
}
|
|
|
return success, personId
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:获取虚拟管理员的personId
|
|
|
作者:黄海
|
|
|
时间:2020-05-30
|
|
|
*/
|
|
|
func GetVirtualManager(bureauId string) (bool, string) {
|
|
|
list, _ := db.Table("t_base_role_person").Select("*").Where("rule_id = ? and identity_id=1", bureauId).Query().List()
|
|
|
if len(list) == 0 {
|
|
|
return false, ""
|
|
|
} else {
|
|
|
return true, list[0]["person_id"].(string)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:设置虚拟管理员状态
|
|
|
作者:黄海
|
|
|
时间:2020-05-30
|
|
|
*/
|
|
|
func UpdateManagerStatus(bureauId string, bUse int32) (int64, error) {
|
|
|
//1、修改TBaseRolePerson
|
|
|
modelBaseRolePerson := new(models.TBaseRolePerson)
|
|
|
modelBaseRolePerson.BUse = bUse
|
|
|
_, err := db.Where("rule_id = ? and identity_id=1", bureauId).Update(&modelBaseRolePerson)
|
|
|
if err != nil {
|
|
|
return 0, err
|
|
|
}
|
|
|
//查找此单位对应的虚拟管理员personId
|
|
|
_, personId := GetVirtualManager(bureauId)
|
|
|
|
|
|
//2、修改 t_base_teacher
|
|
|
//删除缓存
|
|
|
key := SqlKit.GetBean("t_base_teacher").RedisPrefix + personId
|
|
|
RedisUtil.DEL(key)
|
|
|
//修改数据库
|
|
|
modelBaseTeacherOrg := new(models.TBaseTeacherOrg)
|
|
|
modelBaseTeacherOrg.BUse = bUse
|
|
|
_, err = db.Where("person_id = ?", personId).Update(&modelBaseTeacherOrg)
|
|
|
if err != nil {
|
|
|
return 0, err
|
|
|
}
|
|
|
//3、修改t_sys_loginperson
|
|
|
//(1)、找到 t_sys_loginperson的这条对应数据,并修改缓存
|
|
|
var m models.TSysLoginperson
|
|
|
db.Where("person_id = ?", personId).Get(&m)
|
|
|
key = SqlKit.GetBean("t_sys_loginperson").RedisPrefix + m.Id
|
|
|
RedisUtil.DEL(key)
|
|
|
//(2)操作数据库
|
|
|
modelSysLoginperson := new(models.TSysLoginperson)
|
|
|
modelSysLoginperson.BUse = bUse
|
|
|
_, err = db.Where("person_id = ?", personId).Update(&modelSysLoginperson)
|
|
|
if err != nil {
|
|
|
return 0, err
|
|
|
}
|
|
|
return 1, nil
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:获取指定人员的角色列表
|
|
|
作者:黄海
|
|
|
时间:2020-06-12
|
|
|
*/
|
|
|
func GetPersonRoleList(personId string) ([]map[string]interface{}, int32, error) {
|
|
|
var myBuilder = builder.Dialect(builder.MYSQL).Select("role_id,rule_id").
|
|
|
From("t_base_role_person").Where(builder.Eq{"b_use": 1}).And(builder.Eq{"person_id": personId})
|
|
|
sql, err := myBuilder.ToBoundSQL()
|
|
|
if err != nil {
|
|
|
return nil, 0, err
|
|
|
}
|
|
|
list, err := db.SQL(sql).Query().List()
|
|
|
if err != nil {
|
|
|
return nil, 0, err
|
|
|
}
|
|
|
return list, int32(len(list)), nil
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:判断人员是不是超级管理员
|
|
|
作者:黄海
|
|
|
时间:2020-06-12
|
|
|
*/
|
|
|
func IsAdmin(personId string) (bool, error) {
|
|
|
list, _, err := GetPersonRoleList(personId)
|
|
|
if err != nil {
|
|
|
return false, err
|
|
|
}
|
|
|
for i := range list {
|
|
|
if list[i]["role_id"].(string) == Const.SuperManager {
|
|
|
return true, nil
|
|
|
break
|
|
|
}
|
|
|
}
|
|
|
return false, nil
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:已经激活的城市列表
|
|
|
作者:黄海
|
|
|
时间:2020-06-12
|
|
|
*/
|
|
|
func HaveActiveCityList(AreaType int32) ([]map[string]interface{}, int32, error) {
|
|
|
sql := `select t1.area_code,t2.area_name,if(substring(t2.master_code,3,5)='0000','-1',t2.master_code) as parent_code
|
|
|
from t_base_organization as t1 inner join t_gov_area as t2 on t1.area_code=t2.area_code
|
|
|
where t1.org_type=1 and t1.b_use=1`
|
|
|
//只要市
|
|
|
if AreaType == 1 {
|
|
|
sql = sql + ` and t2.area_level_id=2`
|
|
|
} else //只要县区
|
|
|
{
|
|
|
sql = sql + ` and t2.area_level_id=3`
|
|
|
}
|
|
|
list, err := db.SQL(sql).Query().List()
|
|
|
return list, int32(len(list)), err
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:获取管理的地区
|
|
|
作者:黄海
|
|
|
时间:2020-06-12
|
|
|
*/
|
|
|
func GetManageArea(personId string, AreaType int32) ([]map[string]interface{}, int32, error) {
|
|
|
//此人员有哪些角色
|
|
|
list, _, err := GetPersonRoleList(personId)
|
|
|
if err != nil {
|
|
|
return nil, 0, err
|
|
|
}
|
|
|
var areaIds = make([]string, 0)
|
|
|
for i := range list {
|
|
|
//6位的才是行政区划,36位的是单位代码
|
|
|
if len(list[i]["rule_id"].(string)) == 6 {
|
|
|
areaIds = append(areaIds, list[i]["rule_id"].(string))
|
|
|
}
|
|
|
}
|
|
|
var myBuilder = builder.Dialect(builder.MYSQL).Select("area_code,area_name,if(substring(master_code,3,5)='0000','-1',master_code) as parent_code").
|
|
|
From("t_gov_area").Where(builder.In("area_code", areaIds))
|
|
|
//只要市
|
|
|
if AreaType == 1 {
|
|
|
myBuilder.And(builder.Eq{"area_level_id": 2})
|
|
|
} else //只要县区
|
|
|
{
|
|
|
myBuilder.And(builder.Eq{"area_level_id": 3})
|
|
|
}
|
|
|
sql, err := myBuilder.ToBoundSQL()
|
|
|
if err != nil {
|
|
|
return nil, 0, err
|
|
|
}
|
|
|
list, err = db.SQL(sql).Query().List()
|
|
|
return list, int32(len(list)), err
|
|
|
}
|
|
|
|
|
|
//将角色的ID_INT转换为ID_UUID
|
|
|
func ConvertRoleIntIdsToGuidIds(idIntArray []string) ([]string, error) {
|
|
|
var myBuilder = builder.Dialect(builder.MYSQL).Select("role_id").
|
|
|
From("t_base_role").Where(builder.Eq{"b_use": 1}).And(builder.In("id_int", idIntArray))
|
|
|
sql, err := myBuilder.ToBoundSQL()
|
|
|
if err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
list, _, err := SqlKit.Query(sql)
|
|
|
if err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
guidArray := make([]string, 0)
|
|
|
for i := range list {
|
|
|
guidArray = append(guidArray, list[i]["role_id"].(string))
|
|
|
}
|
|
|
return guidArray, nil
|
|
|
}
|