package BaseRolePersonDao import ( "dsBaseRpc/Const" "dsBaseRpc/RpcService/BaseRolePerson/BaseRolePersonProto" "dsBaseRpc/RpcService/SysLoginperson/SysLoginpersonDao" "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.QueryForPk(sql) //扩展rule_name 黄海添加于2020-08-04 for i := range list { if len(list[i]["rule_id"].(string)) == 6 { //(1)6位是地区,扩展名称从地区名称中获取 areaCode := list[i]["rule_id"].(string) sql = `select * from t_gov_area where area_code=?` l2, _ := db.SQL(sql, areaCode).Query().List() if len(l2) > 0 { list[i]["rule_name"] = l2[0]["area_name"].(string) } else { list[i]["rule_name"] = "未找到匹配的区域名称" } } else { //(2)36的是单位,从组织机构名称中获取 orgId := list[i]["rule_id"].(string) l2 := SqlKit.QueryByIds([]string{orgId}, "t_base_organization") if len(l2) > 0 { list[i]["rule_name"] = l2[0]["org_name"].(string) } else { list[i]["rule_name"] = "未找到匹配的单位名称" } } } //判断人员的身份, 增加老师和学生的默认角色ID identityId := SysLoginpersonDao.GetIdentityIdByPersonId(in.PersonId) if identityId == 2 { var _map = make(map[string]interface{}) _map["id"] = CommonUtil.GetUUID() _map["id_int"] = -1 _map["role_id"] = "22222222-2222-2222-2222-222222222222" _map["identity_id"] = 2 _map["person_id"] = in.PersonId _map["rule_id"] = -1 _map["rule_name"] = "" _map["b_use"] = 1 _map["last_updated_time"] = CommonUtil.GetCurrentTimestamp() list = append(list, _map) } if identityId == 3 { var _map = make(map[string]interface{}) _map["id"] = CommonUtil.GetUUID() _map["id_int"] = -1 _map["role_id"] = "33333333-3333-3333-3333-333333333333" _map["identity_id"] = 2 _map["person_id"] = in.PersonId _map["rule_id"] = -1 _map["rule_name"] = "" _map["b_use"] = 1 _map["last_updated_time"] = CommonUtil.GetCurrentTimestamp() list = append(list, _map) } 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,(select t3.area_name from t_gov_area as t3 where t3.area_code=t2.master_code) as parent_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) ([]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("t1.area_code,t1.area_name,(select t2.area_name from t_gov_area as t2 where t2.area_code=t1.master_code) as parent_name,if(substring(t1.master_code,3,5)='0000','-1',t1.master_code) as parent_code"). From("t_gov_area as t1").Where(builder.In("t1.area_code", areaIds)).Or(builder.In("t1.master_code",areaIds)) 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.QueryForPk(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 }