123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314 |
- package services
- import (
- "errors"
- "fmt"
- "hongze/hongze_mobile_admin/models/custom"
- "hongze/hongze_mobile_admin/models/tables/admin"
- "hongze/hongze_mobile_admin/models/tables/admin_record"
- "hongze/hongze_mobile_admin/models/tables/h5_admin_session"
- "hongze/hongze_mobile_admin/utils"
- "strconv"
- "time"
- )
- var ERR_NO_ADMIN_RECORD = errors.New("用户关系没有入库")
- var ERR_ADMIN_NOT_BIND = errors.New("用户没有绑定")
- func GetAdminUserItemByOpenId(openid string) (item *custom.AdminWx, err error) {
- item = &custom.AdminWx{}
-
- adminRecord, adminRecordErr := admin_record.GetAdminRecordByOpenId(openid)
- if adminRecordErr != nil {
- if adminRecordErr.Error() == utils.ErrNoRow() {
- err = ERR_NO_ADMIN_RECORD
- return
- } else {
- err = adminRecordErr
- return
- }
- }
-
- if adminRecord == nil {
- err = ERR_NO_ADMIN_RECORD
- return
- }
-
- if adminRecord.UserId <= 0 {
- err = ERR_ADMIN_NOT_BIND
-
- formatWxUserAndUserRecord(item, adminRecord)
- return
- }
-
- item, adminInfoErr := admin.GetAdminWxById(adminRecord.UserId)
- if adminInfoErr != nil {
-
- if adminInfoErr.Error() == utils.ErrNoRow() {
-
- userUnbindErr := admin_record.UnBindAdminRecordByOpenid(openid)
- if userUnbindErr != nil {
- err = userUnbindErr
- return
- }
- err = ERR_ADMIN_NOT_BIND
- adminRecord.UserId = 0
- item = &custom.AdminWx{}
-
- formatWxUserAndUserRecord(item, adminRecord)
- return
- }
- err = adminInfoErr
-
- if adminInfoErr.Error() == utils.ErrNoRow() {
- err = errors.New("用户信息不存在")
- }
- return
- }
-
- formatWxUserAndUserRecord(item, adminRecord)
- return
- }
- func GetAdminUserItemByAdminId(adminId, platform int) (item *custom.AdminWx, err error) {
- item = &custom.AdminWx{}
-
- item, adminErr := admin.GetAdminWxById(adminId)
- if adminErr != nil {
- err = adminErr
- return
- }
-
- formatWxUser(item, platform)
- return
- }
- func formatWxUserAndUserRecord(adminWx *custom.AdminWx, adminRecord *admin_record.AdminRecord) {
- adminWx.OpenId = adminRecord.OpenId
- adminWx.UnionId = adminRecord.UnionId
- adminWx.NickName = adminRecord.NickName
- adminWx.BindAccount = adminRecord.BindAccount
- adminWx.Sex = adminRecord.Sex
- adminWx.Province = adminRecord.Province
- adminWx.City = adminRecord.City
- adminWx.Country = adminRecord.Country
- adminWx.Headimgurl = adminRecord.Headimgurl
- adminWx.AdminId = adminRecord.UserId
-
-
-
- }
- func formatWxUser(adminWx *custom.AdminWx, platform int) {
-
- adminRecord, adminRecordErr := admin_record.GetAdminRecordByAdminId(adminWx.AdminId, platform)
- if adminRecordErr != nil {
- if adminRecordErr.Error() != utils.ErrNoRow() {
- return
- }
- if adminRecordErr.Error() == utils.ErrNoRow() {
- return
- }
- }
-
- if adminRecord == nil {
- return
- }
- formatWxUserAndUserRecord(adminWx, adminRecord)
- return
- }
- func BindWxUser(openid, userName, password string, registerPlatform int) (adminWx *custom.AdminWx, err error, errMsg string) {
- if userName == "" || password == "" {
- errMsg = `账号密码必填`
- err = errors.New(errMsg)
- return
- }
-
- adminInfo, err := admin.CheckAdmin(userName, password)
- if err != nil {
- if err.Error() != utils.ErrNoRow() {
- errMsg = `账号或密码错误`
- err = errors.New(errMsg)
- }
- return
- }
- if adminInfo.Enabled == 0 {
- errMsg = `账号已被禁用,请联系管理员`
- err = errors.New("您的账号已被禁用,如需登录,请联系管理员")
- return
- }
-
- adminWx, err = admin.GetAdminWxById(adminInfo.AdminId)
- if err != nil {
- return
- }
-
- adminRecord, err := admin_record.GetAdminRecordByOpenId(openid)
- if err != nil {
- return
- }
-
-
- if adminRecord.UserId > 0 && adminRecord.UserId != adminInfo.AdminId {
- err = errors.New(fmt.Sprint("用户已绑定,不允许重复绑定:", adminRecord.UserId))
- return
- }
- if adminRecord.UserId == 0 {
- err = admin_record.BindAdminRecordByOpenid(adminInfo.AdminId, openid)
- if err != nil {
- return
- }
- adminRecord.UserId = adminInfo.AdminId
- }
-
-
-
-
-
-
-
-
-
-
-
- formatWxUserAndUserRecord(adminWx, adminRecord)
- return
- }
- func UnbindWxUser(openid string) (err error) {
- err = admin_record.UnBindAdminRecordByOpenid(openid)
- return
- }
- func WxLogin(wxPlatform int, wxAccessToken *WxAccessToken, wxUserInfo *WxUserInfo) (token string, adminWx *custom.AdminWx, err error, errMsg string) {
- errMsg = `微信登录失败`
- openId := wxAccessToken.Openid
- unionId := wxAccessToken.Unionid
- if unionId == "" {
- unionId = wxUserInfo.Unionid
- }
-
- QUERY_WX_USER:
- adminWx, adminWxErr := GetAdminUserItemByOpenId(openId)
- if adminWxErr == ERR_NO_ADMIN_RECORD {
- _, recordErr := AddUserRecord(openId, unionId, wxUserInfo.Nickname, "", wxUserInfo.Province, wxUserInfo.City, wxUserInfo.Country, wxUserInfo.Headimgurl, "", wxPlatform, wxUserInfo.Sex, 0)
-
- if recordErr != nil {
- err = recordErr
- return
- }
-
- goto QUERY_WX_USER
- } else if adminWxErr == ERR_ADMIN_NOT_BIND {
-
-
- } else if adminWxErr != nil {
- err = adminWxErr
- return
- }
- adminId := adminWx.AdminId
- if adminId > 0 && adminWx.Enabled != 1 {
- err = errors.New(fmt.Sprint("账户状态异常,不允许登录,ID:", adminId))
- errMsg = `账户信息异常!`
- return
- }
-
- tokenItem, tokenErr := h5_admin_session.GetTokenByOpenId(openId)
- if tokenErr != nil && tokenErr.Error() != utils.ErrNoRow() {
- err = errors.New("登录失败,获取token失败:" + tokenErr.Error())
- return
- }
- if tokenItem == nil || (tokenErr != nil && tokenErr.Error() == utils.ErrNoRow()) {
- timeUnix := time.Now().Unix()
- timeUnixStr := strconv.FormatInt(timeUnix, 10)
- token = utils.MD5(openId) + utils.MD5(timeUnixStr)
-
- {
- session := &h5_admin_session.H5AdminSession{
- OpenId: openId,
- AdminId: adminWx.AdminId,
- CreatedTime: time.Now(),
- LastUpdatedTime: time.Now(),
- ExpireTime: time.Now().AddDate(0, 3, 0),
- AccessToken: token,
- }
- session.AccessToken = token
- sessionErr := h5_admin_session.AddSession(session)
- if err != nil {
- err = errors.New("登录失败,新增用户session信息失败:" + sessionErr.Error())
- return
- }
- }
- } else {
- token = tokenItem.AccessToken
-
-
-
-
-
- if tokenItem.AdminId != adminId {
- tokenItem.AdminId = adminId
- tokenItem.ExpireTime = time.Now().AddDate(0, 1, 0)
- _ = tokenItem.Update([]string{"AdminId", "ExpireTime"})
- }
- }
- return
- }
- func AddUserRecord(openId, unionId, nickName, realName, province, city, country, headimgurl, sessionKey string, platform, sex, subscribe int) (adminRecord *admin_record.AdminRecord, err error) {
- find, err := admin_record.GetAdminRecordByOpenId(openId)
- if err != nil && err.Error() != utils.ErrNoRow() {
- return
- }
- if find != nil {
- adminRecord = find
- return
- }
- adminRecord = &admin_record.AdminRecord{
- OpenId: openId,
- UnionId: unionId,
- Subscribe: subscribe,
- NickName: nickName,
- RealName: realName,
- Sex: sex,
- Province: province,
- City: city,
- Country: country,
- Headimgurl: headimgurl,
- CreateTime: time.Now(),
- CreatePlatform: platform,
- SessionKey: sessionKey,
- }
- recordId, err := admin_record.AddAdminRecord(adminRecord)
- if err != nil {
- return
- }
- adminRecord.UserRecordId = int(recordId)
- return
- }
|