123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- package handler
- import (
- "cold-logistics/conf"
- "encoding/json"
- "errors"
- "fmt"
- "github.com/alibaba/sentinel-golang/util"
- log "gogs.baozhida.cn/zoie/OAuth-core/logger"
- coreModel "gogs.baozhida.cn/zoie/OAuth-core/model"
- "gogs.baozhida.cn/zoie/OAuth-core/pkg"
- "gogs.baozhida.cn/zoie/OAuth-core/sdk"
- "gorm.io/gorm"
- "net/http"
- )
- type Login struct {
- Username string `form:"UserName" json:"username"` // 用户名
- Password string `form:"Password" json:"password"` // 密码
- Phone string `form:"Phone" json:"phone"` // 手机号
- VerifyCode string `form:"VerifyCode" json:"verifyCode"` // 验证码
- Type int `form:"Type" json:"type"` // 1-密码 2-短信验证码 3-微信登录
- Mobile bool `form:"Mobile" json:"mobile"` // 是否手机登录
- AuthorizationCode string `form:"authorizationCode" json:"authorizationCode"` // 微信登录code
- }
- //Code string `form:"Code" json:"code" binding:"required"`
- //UUID string `form:"UUID" json:"uuid" binding:"required"`
- type SmsLogin struct {
- }
- func (u *Login) GetUser(tx *gorm.DB) (user SysUser, role SysRole, dept SysDept, err error) {
- err = tx.Table("sys_user").Where("username = ? and status = 2", u.Username).First(&user).Error
- if err != nil {
- log.Errorf("get user error, %s", err.Error())
- return
- }
- _, err = pkg.CompareHashAndPassword(user.Password, u.Password)
- if err != nil {
- log.Errorf("user login error, %s", err.Error())
- return
- }
- //err = tx.Table("sys_role").Where("id = ? ", user.RoleId).First(&role).Error
- //if err != nil {
- // log.Errorf("get role error, %s", err.Error())
- // return
- //}
- if user.DeptId > 0 {
- err = tx.Table("sys_dept").Where("id = ? ", user.DeptId).First(&dept).Error
- if err != nil {
- log.Errorf("get dept error, %s", err.Error())
- return
- }
- }
- return
- }
- func (u *Login) GetUserByCode(tx *gorm.DB) (user SysUser, role SysRole, dept SysDept, err error) {
- err = tx.Table("sys_user").Where("phone = ? and status = 2", u.Phone).First(&user).Error
- if err != nil {
- log.Errorf("get user error, %s", err.Error())
- return
- }
- code, err := sdk.Runtime.GetCacheAdapter().Get(GetVerifyCodeCacheKey(u.Phone))
- if err != nil {
- log.Errorf("user login error, %s", err.Error())
- err = errors.New("验证码已过期")
- return
- }
- if code != u.VerifyCode {
- log.Errorf("user login error, %s", "验证码错误")
- err = errors.New("验证码错误")
- return
- }
- err = tx.Table("sys_role").Where("id = ? ", user.RoleId).First(&role).Error
- if err != nil {
- log.Errorf("get role error, %s", err.Error())
- return
- }
- if user.DeptId > 0 {
- err = tx.Table("sys_dept").Where("id = ? ", user.DeptId).First(&dept).Error
- if err != nil {
- log.Errorf("get dept error, %s", err.Error())
- return
- }
- }
- return
- }
- func GetUserByID(tx *gorm.DB, id int64) (user SysUser, role SysRole, err error) {
- err = tx.Table("sys_user").Where("id = ? ", id).First(&user).Error
- if err != nil {
- log.Errorf("get user error, %s", err.Error())
- return
- }
- err = tx.Table("sys_role").Where("id = ? ", user.RoleId).First(&role).Error
- if err != nil {
- log.Errorf("get role error, %s", err.Error())
- return
- }
- return
- }
- type AppletCustomerRegisterReq struct {
- Type int `json:"type"` // 类型 0-商户 1-私人
- Phone string `json:"phone"` // 手机号
- Password string `json:"password"` // 密码
- VerifyCode string `json:"verifyCode"` // 验证码
- }
- type AppletCustomerLoginResp struct {
- Openid string `json:"openid"` //用户唯一标识
- Session_key string `json:"session_key"` // 会话密钥 session_key 是对用户数据进行 加密签名 的密钥
- Unionid string `json:"unionid"` // 用户在开放平台的唯一标识符,若当前小程序已绑定到微信开放平台帐号下会返回
- Errcode int `json:"errcode"` //错误码: -1、0、40029、 45011、 40226 (具体说明,请阅读 接口文档)
- Errmsg string `json:"errmsg"` //错误信息
- }
- func (u *Login) GetUserByWX(tx *gorm.DB) (user SysUser, role SysRole, dept SysDept, err error) {
- url := "https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code"
- appid := conf.ExtConfig.Applet.Appid
- appSecret := conf.ExtConfig.Applet.AppSecret
- url = fmt.Sprintf(url, appid, appSecret, u.AuthorizationCode)
- // 发起请求
- res, _ := http.Get(url)
- // 成功后获取openId
- wxRes := AppletCustomerLoginResp{}
- err = json.NewDecoder(res.Body).Decode(&wxRes)
- if err != nil || wxRes.Openid == "" {
- err = errors.New("获取openid失败")
- return
- }
- err = tx.Where("username = ? and user_type = 'customer' and status = '2' and dept_id = 0", u.Phone).First(&user).Error
- if err != nil {
- if errors.Is(err, gorm.ErrRecordNotFound) {
- // 添加客户
- user = SysUser{
- User: coreModel.User{
- Uuid: util.NewUuid(),
- Username: u.Phone,
- Phone: u.Phone,
- },
- UserType: "customer",
- Openid: wxRes.Openid,
- }
- err = tx.Create(&user).Error
- if err != nil {
- err = errors.New("添加个人信息失败")
- }
- } else {
- err = errors.New("获取个人信息失败")
- return
- }
- }
- if user.Openid != wxRes.Openid {
- user.Openid = wxRes.Openid
- err = tx.Save(&user).Error
- if err != nil {
- err = errors.New("同步个人信息失败")
- return
- }
- }
- return
- }
|