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 }