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.

377 lines
11 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 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"
)
var db = DbUtil.Engine
//增加
func AddSysLoginPerson(model models.TSysLoginperson) (int64, error) {
return db.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
}