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.

288 lines
8.2 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/models"
"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 {
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) {
loginBean := new(models.TSysLoginperson)
loginBean.PersonName = personName
affected, err := db.ID(personId).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.*").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) {
//一组人员肯定是同一个身份ID
myBuilder := builder.Dialect(builder.MYSQL).Select("identity_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 := _list[0]["identity_id"].(int64)
var tableName string
switch identityId {
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("bureau_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
}