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.

266 lines
7.8 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 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
}