|
|
package SysLoginpersonDao
|
|
|
|
|
|
import (
|
|
|
"dsBaseRpc/Const"
|
|
|
"dsBaseRpc/RpcService/SysLoginperson/SysLoginpersonProto"
|
|
|
"dsBaseRpc/Utils/CommonUtil"
|
|
|
"dsBaseRpc/Utils/DbUtil"
|
|
|
"dsBaseRpc/Utils/LdapUtil"
|
|
|
"dsBaseRpc/Utils/RedisUtil"
|
|
|
"dsBaseRpc/Utils/SqlKit"
|
|
|
"dsBaseRpc/Utils/SysKit"
|
|
|
"dsBaseRpc/models"
|
|
|
"errors"
|
|
|
"fmt"
|
|
|
"github.com/xormplus/builder"
|
|
|
"github.com/xormplus/xorm"
|
|
|
)
|
|
|
|
|
|
var db = DbUtil.Engine
|
|
|
|
|
|
//增加
|
|
|
func AddSysLoginPerson(session *xorm.Session, model models.TSysLoginperson) (int64, error) {
|
|
|
return session.Insert(model)
|
|
|
}
|
|
|
|
|
|
//修改
|
|
|
func UpdateSysLoginPerson(model models.TSysLoginperson) (int64, error) {
|
|
|
//1、清除Redis缓存
|
|
|
var ids = []string{model.Id}
|
|
|
var selector = SqlKit.GetBean("t_sys_loginperson")
|
|
|
SqlKit.DeleteCacheByIds(ids, selector)
|
|
|
//2、计算本次操作,有哪些字段需要更新
|
|
|
NeedUpdateFields := CommonUtil.GetNeedUpdateFields(model)
|
|
|
//5、更新操作,强制更新这些列
|
|
|
affected, err := db.ID(model.Id).Cols(NeedUpdateFields...).Update(model)
|
|
|
return affected, err
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:计算的最大登录账号Num
|
|
|
作者:黄海
|
|
|
时间:2020-05-30
|
|
|
*/
|
|
|
func GetLoginIdIntMax(count int64) int64 {
|
|
|
//获取最大
|
|
|
exist, _ := RedisUtil.Exist(Const.LoginIdIntMax)
|
|
|
//如果不存在,就重新初始化Redis键值
|
|
|
if !exist {
|
|
|
SysKit.InitLoginIdIntMax()
|
|
|
}
|
|
|
return RedisUtil.IncrBy(Const.LoginIdIntMax, count)
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:检查指定的身份证号是否可以使用
|
|
|
作者:黄海
|
|
|
时间:2020-06-03
|
|
|
*/
|
|
|
func IsValidIdCardNo(IdCardNo string, excludePersonId string) bool {
|
|
|
//1、先在教师表中查找
|
|
|
sql := "select count(1) as c from t_base_teacher where sfzjh=? and person_id<>? and b_use=1"
|
|
|
list, _ := db.SQL(sql, IdCardNo, excludePersonId).Query().List()
|
|
|
if list[0]["c"].(int64) > 0 {
|
|
|
return false
|
|
|
}
|
|
|
//2、再到学生表中查找
|
|
|
sql = "select count(1) as c from t_base_student where sfzjh=? and person_id<>? and b_use=1"
|
|
|
list, _ = db.SQL(sql, IdCardNo, excludePersonId).Query().List()
|
|
|
if list[0]["c"].(int64) > 0 {
|
|
|
return false
|
|
|
}
|
|
|
return true
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:检查手机号是不是可用
|
|
|
作者:黄海
|
|
|
时间:2020-06-03
|
|
|
*/
|
|
|
func IsValidIdTel(tel string, excludePersonId string) bool {
|
|
|
//1、先在教师表中查找
|
|
|
sql := "select count(1) as c from t_base_teacher where lxdh=? and person_id<>? and b_use=1"
|
|
|
list, _ := db.SQL(sql, tel, excludePersonId).Query().List()
|
|
|
if list[0]["c"].(int64) > 0 {
|
|
|
return false
|
|
|
}
|
|
|
//2、再到家长表中查找
|
|
|
sql = "select count(1) as c from t_base_parent where lxdh=? and person_id<>? and b_use=1"
|
|
|
list, _ = db.SQL(sql, tel, excludePersonId).Query().List()
|
|
|
if list[0]["c"].(int64) > 0 {
|
|
|
return false
|
|
|
}
|
|
|
return true
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:检查邮箱是不是可用
|
|
|
作者:黄海
|
|
|
时间:2020-06-03
|
|
|
*/
|
|
|
func IsValidIdEmail(tel string, excludePersonId string) bool {
|
|
|
//在教师表中查找
|
|
|
sql := "select count(1) as c from t_base_teacher where dzxx=? and person_id<>? and b_use=1"
|
|
|
list, _ := db.SQL(sql, tel, excludePersonId).Query().List()
|
|
|
if list[0]["c"].(int64) > 0 {
|
|
|
return false
|
|
|
}
|
|
|
return true
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:修改登录表中人员的姓名
|
|
|
作者:黄海
|
|
|
时间:2020-06-03
|
|
|
*/
|
|
|
func UpdatePersonName(personId string, personName string) (int64, error) {
|
|
|
var loginBean models.TSysLoginperson
|
|
|
loginBean.PersonId = personId
|
|
|
has, err := db.Where("person_id = ?", personId).Get(&loginBean)
|
|
|
if !has {
|
|
|
return 0, nil
|
|
|
}
|
|
|
if err != nil {
|
|
|
return 0, err
|
|
|
}
|
|
|
//删除登录表的缓存
|
|
|
var ids = []string{loginBean.Id}
|
|
|
var selector = SqlKit.GetBean("t_sys_loginperson")
|
|
|
SqlKit.DeleteCacheByIds(ids, selector)
|
|
|
//删除登录表
|
|
|
loginBean.PersonName = personName
|
|
|
affected, err := db.ID(loginBean.Id).Update(loginBean)
|
|
|
return affected, err
|
|
|
}
|
|
|
|
|
|
//分页查询
|
|
|
func PageSysLoginPerson(in *SysLoginpersonProto.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("t1.*,t3.org_name").From("t_sys_loginperson as t1").
|
|
|
InnerJoin("t_base_role_person as t2", "t1.person_id=t2.person_id").
|
|
|
InnerJoin("t_base_organization as t3", "t2.rule_id=t3.bureau_id").
|
|
|
Where(builder.Eq{"t3.area_code": in.AreaCode}).
|
|
|
And(builder.Eq{"t3.b_use": 1})
|
|
|
myBuilder.And(builder.In("t3.org_type", in.OrgType))
|
|
|
myBuilder.OrderBy("t3.sort_id").OrderBy("t3.org_type").OrderBy("t3.id_int")
|
|
|
//获取拼接完成的SQL语句
|
|
|
sql, err := myBuilder.Limit(limit, offset).ToBoundSQL()
|
|
|
if err != nil {
|
|
|
fmt.Println(err.Error())
|
|
|
}
|
|
|
list, count, err := SqlKit.Query(sql)
|
|
|
//处理一下是不是初始密码的问题
|
|
|
FillPwd(&list)
|
|
|
return list, count, err
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:地区管理员列表
|
|
|
作者:黄海
|
|
|
时间:2020-06-06
|
|
|
*/
|
|
|
func PageAreaManager(in *SysLoginpersonProto.AreaManagerArg) ([]map[string]interface{}, int32, error) {
|
|
|
//给定市级的areaCode,返回是下属县区的管理员
|
|
|
var limit = int(in.Limit)
|
|
|
var offset = int((in.Page - 1) * in.Limit)
|
|
|
//主管区域码下有哪些区域
|
|
|
sql := "select area_code from t_gov_area where master_code=?"
|
|
|
list, _ := db.SQL(sql, in.AreaCode).Query().List()
|
|
|
areaCodes := make([]string, 0)
|
|
|
for i := range list {
|
|
|
areaCodes = append(areaCodes, list[i]["area_code"].(string))
|
|
|
}
|
|
|
//将自己也加入进来,不光是自己的孩子
|
|
|
areaCodes = append(areaCodes, in.AreaCode)
|
|
|
var myBuilder = builder.Dialect(builder.MYSQL).Select("t2.*").From("t_base_role_person as t1").
|
|
|
InnerJoin("t_sys_loginperson as t2", "t1.person_id=t2.person_id").
|
|
|
Where(builder.Eq{"t1.b_use": 1}).
|
|
|
And(builder.Eq{"t2.b_use": 1}).
|
|
|
And(builder.In("t1.role_id", []string{Const.ProvinceManager, Const.CityManager, Const.DistrictManager})).
|
|
|
And(builder.In("t1.rule_id", areaCodes)).Limit(limit, offset)
|
|
|
sql, _ = myBuilder.ToBoundSQL()
|
|
|
list, count, err := SqlKit.Query(sql)
|
|
|
//处理一下是不是初始密码的问题
|
|
|
FillPwd(&list)
|
|
|
return list, count, err
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:将返回的查询结果集进行扩展是否修改过密码的修改
|
|
|
作者:黄海
|
|
|
时间:2020-06-08
|
|
|
*/
|
|
|
func FillPwd(list *[]map[string]interface{}) {
|
|
|
for i := range *list {
|
|
|
record := (*list)[i]
|
|
|
if record["pwd"].(string) != LdapUtil.GetLdapPassword(record["original_pwd"].(string)) {
|
|
|
record["original_pwd"] = "用户已修改"
|
|
|
}
|
|
|
delete(record, "pwd")
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:重置密码
|
|
|
作者:黄海
|
|
|
时间:2020-06-08
|
|
|
*/
|
|
|
func ResetPassWord(ids []string) error {
|
|
|
var myBuilder = builder.Dialect(builder.MYSQL).Select("id,original_pwd").From("t_sys_loginperson").Where(builder.In("id", ids))
|
|
|
sql, err := myBuilder.ToBoundSQL()
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
list, err := db.SQL(sql).Query().List()
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
sql = `update t_sys_loginperson set pwd=? where id=?`
|
|
|
for i := range list {
|
|
|
_, err = db.Exec(sql, LdapUtil.GetLdapPassword(list[i]["original_pwd"].(string)), ids[i])
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
}
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
//启用/禁用账号
|
|
|
func EnableDisableAccount(personIds []string, bUse int) error {
|
|
|
//修改数据库
|
|
|
var myBuilder = builder.Dialect(builder.MYSQL).Update(builder.Eq{"b_use": bUse}).From("t_sys_loginperson").
|
|
|
Where(builder.In("person_id", personIds))
|
|
|
sql, err := myBuilder.ToBoundSQL()
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
_, err = db.Exec(sql)
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
|
|
|
//删除缓存
|
|
|
myBuilder = builder.Dialect(builder.MYSQL).Select("id").From("t_sys_loginperson").
|
|
|
Where(builder.In("person_id", personIds))
|
|
|
sql, err = myBuilder.ToBoundSQL()
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
list, err := db.SQL(sql).Query().List()
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
var ids = make([]string, 0)
|
|
|
for i := range list {
|
|
|
ids = append(ids, list[i]["id"].(string))
|
|
|
}
|
|
|
var selector = SqlKit.GetBean("t_sys_loginperson")
|
|
|
SqlKit.DeleteCacheByIds(ids, selector)
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
//根据登录信息表,获取人员与单位的关系信息
|
|
|
func GetBureauIdsByPersonIds(personIds []string) ([]map[string]interface{}, string, error) {
|
|
|
//如果没有正确传入参数
|
|
|
if len(personIds) == 0 {
|
|
|
return nil, Const.DataBaseActionError, errors.New("没有正确传入人员ID数组")
|
|
|
}
|
|
|
//一组人员,肯定是同一个身份ID
|
|
|
myBuilder := builder.Dialect(builder.MYSQL).Select("id").From("t_sys_loginperson").
|
|
|
Where(builder.Eq{"person_id": personIds[0]})
|
|
|
sql, err := myBuilder.ToBoundSQL()
|
|
|
if err != nil {
|
|
|
return nil, Const.DataBaseActionError, err
|
|
|
}
|
|
|
_list, _, err := SqlKit.Query(sql)
|
|
|
if err != nil {
|
|
|
return nil, Const.DataBaseActionError, err
|
|
|
}
|
|
|
if len(_list) == 0 {
|
|
|
return nil, "没有找到指定的人员信息!", nil
|
|
|
}
|
|
|
//身份
|
|
|
identityId := int32(_list[0]["identity_id"].(float64))
|
|
|
|
|
|
var tableName string
|
|
|
switch identityId {
|
|
|
case 1:
|
|
|
//管理员
|
|
|
tableName = "t_base_teacher"
|
|
|
break
|
|
|
case 2:
|
|
|
//教师
|
|
|
tableName = "t_base_teacher"
|
|
|
break
|
|
|
case 3:
|
|
|
//学生
|
|
|
tableName = "t_base_student"
|
|
|
break
|
|
|
case 4:
|
|
|
//家长
|
|
|
tableName = "t_base_parent"
|
|
|
break
|
|
|
default:
|
|
|
return nil, "查询到的身份ID有误!", nil
|
|
|
break
|
|
|
}
|
|
|
myBuilder = builder.Dialect(builder.MYSQL).Select("person_id").From(tableName).
|
|
|
Where(builder.In("person_id", personIds))
|
|
|
sql, err = myBuilder.ToBoundSQL()
|
|
|
if err != nil {
|
|
|
return nil, Const.DataBaseActionError, err
|
|
|
}
|
|
|
list, _, err := SqlKit.Query(sql)
|
|
|
return list, Const.SuccessDataBaseAction, nil
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:判断密码是不是正确
|
|
|
*/
|
|
|
func CheckPwd(identityId int32, personId string, pwd string) (bool, error) {
|
|
|
myBuilder := builder.Dialect(builder.MYSQL).Select("pwd").From("t_sys_loginperson").
|
|
|
Where(builder.Eq{"identity_id": identityId}).And(builder.Eq{"person_id": personId}).And(builder.Eq{"b_use": 1})
|
|
|
sql, err := myBuilder.ToBoundSQL()
|
|
|
if err != nil {
|
|
|
return false, err
|
|
|
}
|
|
|
list, err := db.SQL(sql).Query().List()
|
|
|
if list == nil || len(list) == 0 {
|
|
|
return false, nil
|
|
|
}
|
|
|
if list[0]["pwd"] == LdapUtil.GetLdapPassword(pwd) {
|
|
|
return true, nil
|
|
|
} else {
|
|
|
return false, nil
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:修改密码
|
|
|
*/
|
|
|
func UpdatePwd(identityId int32, personId string, pwd string) (bool, error) {
|
|
|
loginPerson := new(models.TSysLoginperson)
|
|
|
loginPerson.Pwd = LdapUtil.GetLdapPassword(pwd)
|
|
|
_, err := db.Where("identity_id = ?", identityId).And("person_id = ?", personId).Update(loginPerson)
|
|
|
if err != nil {
|
|
|
return false, err
|
|
|
}
|
|
|
return true, nil
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
功能:根据人员ID获取人员的身份ID
|
|
|
*/
|
|
|
func GetIdentityIdByPersonId(personId string) int64 {
|
|
|
sql := "select identity_id from t_sys_loginperson where person_id=?"
|
|
|
list, _ := db.SQL(sql, personId).Query().List()
|
|
|
if len(list) > 0 {
|
|
|
return list[0]["identity_id"].(int64)
|
|
|
} else {
|
|
|
return -1
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/*解除绑定第三方授权*/
|
|
|
func UnbindAuthorization(personId string) {
|
|
|
sql := `update t_sys_loginperson set wx_open_id='' where person_id=?`
|
|
|
db.SQL(sql, personId).Execute()
|
|
|
}
|
|
|
|
|
|
//获取已绑定的第三方授权
|
|
|
func GetBindAuthorization(personId string) ([]map[string]interface{}, error) {
|
|
|
sql := `select wx_open_id from t_sys_loginperson where person_id=?`
|
|
|
list, err := db.SQL(sql, personId).Query().List()
|
|
|
return list, err
|
|
|
}
|