Ver código fonte

change_session

Xingyu Xian 1 semana atrás
pai
commit
798375a202
6 arquivos alterados com 190 adições e 166 exclusões
  1. 26 27
      handler/addNewSubAccount.go
  2. 19 8
      handler/code_login.go
  3. 2 1
      middleware/login_auth.go
  4. 15 15
      route/init.go
  5. 127 114
      service/login_auth.go
  6. 1 1
      service/sub_account.go

+ 26 - 27
handler/addNewSubAccount.go

@@ -1,7 +1,6 @@
 package handler
 
 import (
-	"fmt"
 	"github.com/gin-gonic/gin"
 	"youngee_b_api/model/http_model"
 	"youngee_b_api/service"
@@ -36,36 +35,36 @@ func (h *AddNewSubAccountHandler) getResponse() interface{} {
 	return h.resp
 }
 func (h *AddNewSubAccountHandler) run() {
-	// fmt.Println("AddNewSubAccountHandler Running")
-	newSubAccount := http_model.AddNewSubAccountRequest{}
-	newSubAccount = *h.req
+
 	// 1. 验证码校验
-	tag, err := service.LoginAuth.SubAccountAuthCode(h.ctx, newSubAccount.PhoneNumber, newSubAccount.Code)
+	tag, data, err := service.LoginAuth.SubAccountAuthCode(h.ctx, h.req)
 	if err != nil {
-		fmt.Println(err)
+		h.resp.Data = data
+		h.resp.Message = err.Error()
+		h.resp.Status = 40000
+		return
+	}
+	if tag == 1 {
+		h.resp.Data = data
+		h.resp.Message = "验证码校验错误"
+		h.resp.Status = 34000
+		return
+	}
+	if tag == 2 {
+		h.resp.Data = data
+		h.resp.Message = "此手机号已被已认证的服务商主账号绑定"
+		h.resp.Status = 35000
+		return
 	}
-	// 2. 校验通过则创建样叽用户和子账号
-	if tag == "1" {
-		subAccountData, createSubAccountErr := service.SubAccount.CreateSubAccount(h.ctx, newSubAccount)
-		if createSubAccountErr != nil {
-			fmt.Println(err)
-			h.resp.Message = "创建失败"
-			return
-		}
-		if subAccountData != nil {
-			respData := http_model.AddNewSubAccountData{
-				UserID:       int64(subAccountData.UserId),
-				SupplierId:   subAccountData.SupplierId,
-				SubAccountID: subAccountData.SubAccountId,
-			}
-			h.resp.Message = "成功创建子账号"
-			h.resp.Data = respData
-		}
-	} else {
-		// 验证码校验不通过的返回值
-		h.resp.Message = tag
+	if tag == 3 {
+		h.resp.Data = data
+		h.resp.Message = "此手机号已被服务商子账号绑定"
+		h.resp.Status = 36000
+		return
 	}
-	return
+	h.resp.Data = data
+	h.resp.Message = "ok"
+	h.resp.Status = 20000
 }
 
 func (h *AddNewSubAccountHandler) checkParam() error {

+ 19 - 8
handler/code_login.go

@@ -1,14 +1,11 @@
 package handler
 
 import (
-	"youngee_b_api/consts"
-	"youngee_b_api/model/http_model"
-	"youngee_b_api/service"
-	"youngee_b_api/util"
-
 	"github.com/gin-gonic/gin"
 	"github.com/sirupsen/logrus"
 	log "github.com/sirupsen/logrus"
+	"youngee_b_api/model/http_model"
+	"youngee_b_api/service"
 )
 
 func WrapCodeLoginHandler(ctx *gin.Context) {
@@ -43,16 +40,30 @@ func (h *CodeLoginHandler) getResponse() interface{} {
 }
 
 func (h *CodeLoginHandler) run() {
-	msg, userData, err := service.LoginAuth.AuthCode(h.ctx, h.req.Phone, h.req.Code)
+	tag, userData, err := service.LoginAuth.AuthCode(h.ctx, h.req.Phone, h.req.Code)
 	if err != nil {
 		logrus.Errorf("[CodeLoginHandler] call AuthCode err:%+v\n", err)
-		util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, msg)
+		// util.HandlerPackErrorResp(h.resp, consts.ErrorInternal, msg)
 		log.Info("login fail,req:%+v", h.req)
+		h.resp.Status = 40000
+		h.resp.Message = err.Error()
+		h.resp.Data = nil
+		return
+	}
+	if tag == 1 {
+		h.resp.Status = 34000
+		h.resp.Message = "验证码校验错误"
+		h.resp.Data = nil
+		return
+	}
+	if tag == 2 {
+		h.resp.Status = 34500
+		h.resp.Message = "账户已停用"
+		h.resp.Data = nil
 		return
 	}
 	var data *http_model.CodeLoginData
 	data = userData
-	// h.resp.Message = "登陆成功"
 	h.resp.Data = data
 }
 

+ 2 - 1
middleware/login_auth.go

@@ -1,6 +1,7 @@
 package middleware
 
 import (
+	"fmt"
 	"youngee_b_api/consts"
 	"youngee_b_api/model/redis_model"
 	"youngee_b_api/service"
@@ -14,7 +15,7 @@ import (
 func LoginAuthMiddleware(c *gin.Context) {
 	token := c.Request.Header.Get("Authorization")
 	if token != "" {
-		//fmt.Println(token)
+		fmt.Println(token)
 		if auth, err := service.LoginAuth.AuthToken(c, token); err == nil {
 			c.Set(consts.SessionAuthSchema, auth)
 			c.Next()

+ 15 - 15
route/init.go

@@ -148,28 +148,28 @@ func InitRoute(r *gin.Engine) {
 	}
 
 	// 回票
-	supplierInvoice := r.Group("/youngee/l/supplierInvoice")
+	supplierInvoice := r.Group("/youngee/f/supplierInvoice")
 	{
 		supplierInvoice.Use(middleware.LoginAuthMiddleware)
-		f.POST("/incomeList", handler.WrapFullSProjectIncomeListHandler) // 可回发票列表
-		f.POST("/create", handler.WrapCreateSupplierInvoiceHandler)      // 合并账单回票
-		f.POST("/update", handler.WrapUpdateSupplierInvoiceHandler)      // 上传发票
-		f.POST("/invoiceList", handler.WrapSupplierInvoiceListHandler)   // 发票列表
-		f.POST("/ygInvoiceInfo", handler.WrapManageInvoiceInfoHandler)   // 平台回票信息
-		f.POST("/amount", handler.WrapInvoiceAmountHandler)              // 可回发票、待传发票、平台确认中、已回发票金额
+		supplierInvoice.POST("/incomeList", handler.WrapFullSProjectIncomeListHandler) // 可回发票列表
+		supplierInvoice.POST("/create", handler.WrapCreateSupplierInvoiceHandler)      // 合并账单回票
+		supplierInvoice.POST("/update", handler.WrapUpdateSupplierInvoiceHandler)      // 上传发票
+		supplierInvoice.POST("/invoiceList", handler.WrapSupplierInvoiceListHandler)   // 发票列表
+		supplierInvoice.POST("/ygInvoiceInfo", handler.WrapManageInvoiceInfoHandler)   // 平台回票信息
+		supplierInvoice.POST("/amount", handler.WrapInvoiceAmountHandler)              // 可回发票、待传发票、平台确认中、已回发票金额
 	}
 
 	// 提现
-	supplierWithdraw := r.Group("/youngee/l/supplierWithdraw")
+	supplierWithdraw := r.Group("/youngee/f/supplierWithdraw")
 	{
 		supplierWithdraw.Use(middleware.LoginAuthMiddleware)
-		f.POST("/amount", handler.WrapWithdrawAmountHandler)                       // 可提现、提现中、已提现金额
-		f.POST("/paymentInfo", handler.WrapWithdrawPaymentInfoHandler)             // 查询提现收款信息
-		f.POST("/createPaymentInfo", handler.WrapCreateWithdrawPaymentInfoHandler) // 新增收款信息
-		f.POST("/updatePaymentInfo", handler.WrapUpdateWithdrawPaymentInfoHandler) // 更新收款信息
-		f.POST("/toList", handler.WrapSupplierToWithdrawListHandler)               // 服务商可提现账单列表
-		f.POST("/create", handler.WrapCreateSupplierWithdrawHandler)               // 服务商提现
-		f.POST("/List", handler.WrapSupplierWithdrawListHandler)                   // 提现管理列表
+		supplierWithdraw.POST("/amount", handler.WrapWithdrawAmountHandler)                       // 可提现、提现中、已提现金额
+		supplierWithdraw.POST("/paymentInfo", handler.WrapWithdrawPaymentInfoHandler)             // 查询提现收款信息
+		supplierWithdraw.POST("/createPaymentInfo", handler.WrapCreateWithdrawPaymentInfoHandler) // 新增收款信息
+		supplierWithdraw.POST("/updatePaymentInfo", handler.WrapUpdateWithdrawPaymentInfoHandler) // 更新收款信息
+		supplierWithdraw.POST("/toList", handler.WrapSupplierToWithdrawListHandler)               // 服务商可提现账单列表
+		supplierWithdraw.POST("/create", handler.WrapCreateSupplierWithdrawHandler)               // 服务商提现
+		supplierWithdraw.POST("/List", handler.WrapSupplierWithdrawListHandler)                   // 提现管理列表
 	}
 
 	m := r.Group("/youngee/m")

+ 127 - 114
service/login_auth.go

@@ -34,6 +34,7 @@ type loginAuth struct {
 
 func (l *loginAuth) AuthToken(ctx context.Context, token string) (*redis_model.Auth, error) {
 	phone, err := l.parseToken(ctx, token)
+	fmt.Println(phone)
 	if err != nil {
 		logrus.Debug("token格式错误:%+v", token)
 		return nil, err
@@ -51,112 +52,114 @@ func (l *loginAuth) AuthToken(ctx context.Context, token string) (*redis_model.A
 }
 
 // AuthCode 判断此手机号是否有账号存在 鉴定验证码 用户信息存入redis 并返回Token
-func (l *loginAuth) AuthCode(ctx context.Context, phone string, code string) (string, *http_model.CodeLoginData, error) {
+func (l *loginAuth) AuthCode(ctx context.Context, phone string, code string) (int, *http_model.CodeLoginData, error) {
 
 	// 1. 验证码校验
-	vcode, err := l.getSessionCode(ctx, phone)
-	if err != nil {
-		return "", nil, err
+	vCode, codeErr := l.getSessionCode(ctx, phone)
+	if codeErr != nil {
+		return 0, nil, codeErr
 	}
-	fmt.Printf("缓存的验证码 vcode: %v,实际填入的 code:%v", vcode, code)
-	if vcode != code {
+	// fmt.Printf("缓存的验证码 vCode: %v,实际填入的 code:%v", vCode, code)
+	if vCode != code {
 		// 验证码错误
 		logrus.Debugf("[AuthCode] auth fail,phone:%+v", phone)
-		return "验证码有误", nil, errors.New("auth fail")
+		return 1, nil, nil
 	}
 
-	// 2. 若无用户信息则注册
+	// 2. 注册或登录
 	var userData *gorm_model.YounggeeUser
-	user, err := db.GetUserByPhone(ctx, phone)
-	fmt.Println("login_auth", user, err)
-	if err != nil {
-		// 数据库操作错误
-		return "", nil, err
-	} else if user == nil {
-		user, err := db.GetSubUserByPhone(ctx, phone)
-		if user == nil {
-			fmt.Println("子账号也不存在")
+	userInfo, userErr := db.GetUserByPhone(ctx, phone)
+	if userErr != nil {
+		return 0, nil, userErr
+	}
+	if userInfo == nil {
+		subAccountUser, subAccountErr := db.GetSubUserByPhone(ctx, phone)
+		if subAccountErr != nil {
+			return 0, nil, subAccountErr
+		}
+		if subAccountUser == nil {
 			// 账号不存在,则注册服务商与YG账号
-			_, err = Supplier.CreateSupplier(ctx, phone)
-			if err != nil {
-				return "服务商账号创建失败", nil, err
+			_, createSupplierErr := Supplier.CreateSupplier(ctx, phone)
+			if createSupplierErr != nil {
+				return 0, nil, createSupplierErr
 			}
-			user, err = db.GetUserByPhone(ctx, phone)
-			userData = user
-			fmt.Println("login_auth", user, err)
-			if err != nil {
-				return "", nil, err
+			supplierUserInfo, supplierUserInfoErr := db.GetUserByPhone(ctx, phone)
+			if supplierUserInfoErr != nil {
+				return 0, nil, supplierUserInfoErr
 			}
+			userData = supplierUserInfo
 		} else {
-			userData = user
+			userData = subAccountUser
 		}
-	} else if user != nil {
-		fmt.Println("是服务商主账号")
-		userData = user
+	} else {
+		// fmt.Println("是服务商主账号")
+		userData = userInfo
 	}
 
-	token := l.getToken(ctx, phone)
+	token := l.getToken(ctx, phone, userData.Role)
 
 	var jobData gorm_model.YounggeeJob
 	var accountData gorm_model.YounggeeSubAccount
 	var supplierUser gorm_model.YoungeeSupplier
 	var ifsuppplier int = 0
-	var ifsubaccount int = 0
 
 	// 3. 根据用户类型的不同追加信息返回前端
 	// 若为服务商用户
 	if string(userData.Role) == "6" {
-		fmt.Println("服务商主账号")
-		supplier, err := db.GetSupplierByUserID(ctx, userData.ID)
-		supplierUser = *supplier
+		// fmt.Println("服务商主账号")
+		supplierInfo, supplierInfoErr := db.GetSupplierByUserID(ctx, userData.ID)
+		if supplierInfoErr != nil {
+			return 0, nil, supplierInfoErr
+		}
+
+		supplierUser = *supplierInfo
 		ifsuppplier = 1
 		// fmt.Println(supplier)
-		if err != nil {
-			return "", nil, err
-		}
 		auth := &redis_model.Auth{
-			Phone:        phone,
-			ID:           userData.ID,
-			User:         userData.User,
-			Username:     userData.Username,
-			RealName:     userData.RealName,
-			Role:         userData.Role,
-			Email:        userData.Email,
-			Token:        token,
-			EnterpriseID: "32123",
-			SupplierId:   supplier.SupplierId,
+			Phone:      phone,
+			ID:         userData.ID,
+			User:       userData.User,
+			Username:   userData.Username,
+			RealName:   userData.RealName,
+			Role:       userData.Role,
+			Email:      userData.Email,
+			Token:      token,
+			SupplierId: supplierUser.SupplierId,
 		}
-		if err := l.setSession(ctx, phone, auth); err != nil {
+		key := phone + userData.Role
+		if err := l.setSession(ctx, key, auth); err != nil {
 			fmt.Printf("setSession error\n")
-			return "", nil, err
+			return 0, nil, err
 		}
 	} else {
 		// 若为服务商子账号
 		fmt.Printf("服务商子账号")
-		subaccount, err := db.FindSubAccountByPhone(ctx, phone)
-		accountData = *subaccount
-		if err != nil {
-			return "", nil, err
+		subAccountInfo, subAccountErr := db.FindSubAccountByPhone(ctx, phone)
+		if subAccountErr != nil {
+			return 0, nil, subAccountErr
 		}
-		ifsubaccount = 1
+		accountData = *subAccountInfo
 		auth := &redis_model.Auth{
-			Phone:        phone,
-			ID:           userData.ID,
-			User:         userData.User,
-			Username:     userData.Username,
-			RealName:     userData.RealName,
-			Role:         userData.Role,
-			Email:        userData.Email,
-			Token:        token,
-			SupplierId:   subaccount.SupplierId,
-			EnterpriseID: "32123",
+			Phone:      phone,
+			ID:         userData.ID,
+			User:       userData.User,
+			Username:   userData.Username,
+			RealName:   userData.RealName,
+			Role:       userData.Role,
+			Email:      userData.Email,
+			Token:      token,
+			SupplierId: subAccountInfo.SupplierId,
 		}
 
-		job, err := db.FindJobByJobId(ctx, subaccount.JobId)
-		jobData = *job
-		if err := l.setSession(ctx, phone, auth); err != nil {
+		jobInfo, jobErr := db.FindJobByJobId(ctx, subAccountInfo.JobId)
+		if jobErr != nil {
+			return 0, nil, jobErr
+		}
+		jobData = *jobInfo
+		key := phone + userData.Role
+		if err := l.setSession(ctx, key, auth); err != nil {
 			fmt.Printf("setSession error\n")
-			return "", nil, err
+			return 0, nil, err
 		}
 	}
 
@@ -170,13 +173,12 @@ func (l *loginAuth) AuthCode(ctx context.Context, phone string, code string) (st
 			SubAccountId:         0,
 			SupplierId:           supplierUser.SupplierId,
 			JobName:              "主账号无岗位",
-			EnterpriseId:         "1",
 			CommercialCenter:     "1",
 			CooperatePermission:  "1",
 			FinancialPermission:  "1",
 			CommercialManagement: "1",
 		}
-	} else if ifsubaccount == 1 {
+	} else {
 		loginUserData = http_model.CodeLoginData{
 			UserId:               userData.ID,
 			Token:                token,
@@ -184,15 +186,14 @@ func (l *loginAuth) AuthCode(ctx context.Context, phone string, code string) (st
 			SubAccountId:         accountData.SubAccountId,
 			JobName:              jobData.JobName,
 			SupplierId:           accountData.SupplierId,
-			EnterpriseId:         accountData.EnterpriseId,
 			CommercialCenter:     jobData.CommercialCenter,
 			CooperatePermission:  jobData.CooperatePermission,
 			FinancialPermission:  jobData.FinancialPermission,
 			CommercialManagement: jobData.CommercialManagement,
 		}
 	}
-	fmt.Println("finish: ", loginUserData)
-	return "", &loginUserData, nil
+	// fmt.Println("finish: ", loginUserData)
+	return 0, &loginUserData, nil
 }
 
 // func (l *loginAuth) AuthPassword(ctx context.Context, phone string, password string) (string, error) {
@@ -260,9 +261,9 @@ func (l *loginAuth) getSessionAuth(ctx context.Context, phone string) (*redis_mo
 	return auth, nil
 }
 
-func (l *loginAuth) getToken(ctx context.Context, phone string) string {
+func (l *loginAuth) getToken(ctx context.Context, phone string, role string) string {
 	timeSeed := strconv.FormatInt(time.Now().Unix(), 10)
-	token := phone + "." + timeSeed + "." + util.MD5(phone, timeSeed, consts.AuthSalt)
+	token := phone + role + "." + timeSeed + "." + util.MD5(phone+role, timeSeed, consts.AuthSalt)
 	return token
 }
 
@@ -286,55 +287,67 @@ func (l *loginAuth) getRedisKey(key string) string {
 	return fmt.Sprintf("%s%s", consts.SessionRedisPrefix, key)
 }
 
-func (l *loginAuth) SubAccountAuthCode(ctx context.Context, phone string, code string) (string, error) {
-	user, err := db.FindSubAccountByPhone(ctx, phone)
-	phoneNumber := phone
-	fmt.Println("login_auth", user, err)
-	if err != nil {
-		// 数据库错误
-		return "数据库错误", err
-	} else if user == nil {
+func (l *loginAuth) SubAccountAuthCode(ctx context.Context, req *http_model.AddNewSubAccountRequest) (int, *http_model.AddNewSubAccountData, error) {
+
+	// 验证码校验
+	phoneNumber := req.PhoneNumber
+	vCode, vCodeErr := l.getSessionCode(ctx, phoneNumber)
+	if vCodeErr != nil {
+		return 0, nil, vCodeErr
+	}
+	fmt.Printf("缓存的验证码 vcode: %v,实际填入的 code:%v", vCode, req.Code)
+	if vCode != req.Code {
+		// 验证码错误
+		logrus.Debugf("[AuthCode] auth fail,phone:%+v", phoneNumber)
+		return 1, nil, nil
+	}
+
+	subAccountUserInfo, subAccountUserErr := db.FindSubAccountByPhone(ctx, req.PhoneNumber)
+	if subAccountUserErr != nil {
+		return 0, nil, subAccountUserErr
+	}
+	if subAccountUserInfo == nil {
 		// 账号不存在,则判断此手机号码是否被服务商主账号注册
-		user, err := db.GetUserByPhone(ctx, phoneNumber)
-		if err != nil {
-			// 数据库操作错误
-			return "", err
-		} else if user == nil {
+		supplierUserInfo, supplierUserErr := db.GetUserByPhone(ctx, phoneNumber)
+		if supplierUserErr != nil {
+			return 0, nil, supplierUserErr
+		}
+		if supplierUserInfo == nil {
 			// 没有被服务商主账户注册,则可以注册
-			vcode, err := l.getSessionCode(ctx, phoneNumber)
-			if err != nil {
-				return "session err", err
+			var respData *http_model.AddNewSubAccountData
+			respData = &http_model.AddNewSubAccountData{}
+			subAccountData, createSubAccountErr := SubAccount.CreateSubAccount(ctx, req)
+			if createSubAccountErr != nil {
+				return 0, nil, createSubAccountErr
 			}
-			fmt.Printf("缓存的验证码 vcode: %v,实际填入的 code:%v", vcode, code)
-			if vcode != code {
-				// 验证码错误
-				logrus.Debugf("[AuthCode] auth fail,phone:%+v", phone)
-				return "验证码有误", errors.New("auth fail")
+			if subAccountData != nil {
+				respData.UserID = int64(subAccountData.UserId)
+				respData.SupplierId = subAccountData.SupplierId
+				respData.SubAccountID = subAccountData.SubAccountId
 			}
-			return "1", err
-		} else if string(user.Role) == "6" {
-			if user.AuthStatus == 1 {
+			return 0, respData, nil
+		} else {
+			if supplierUserInfo.AuthStatus != 1 {
 				// 被服务商主账户注册,未认证,则可以注册
-				vcode, err := l.getSessionCode(ctx, phoneNumber)
-				if err != nil {
-					return "session err", err
+				var respData *http_model.AddNewSubAccountData
+				respData = &http_model.AddNewSubAccountData{}
+				subAccountData, createSubAccountErr := SubAccount.CreateSubAccount(ctx, req)
+				if createSubAccountErr != nil {
+					return 0, nil, createSubAccountErr
 				}
-				fmt.Printf("缓存的验证码 vcode: %v,实际填入的 code:%v", vcode, code)
-				if vcode != code {
-					// 验证码错误
-					logrus.Debugf("[AuthCode] auth fail,phone:%+v", phone)
-					return "验证码有误", errors.New("auth fail")
+				if subAccountData != nil {
+					respData.UserID = int64(subAccountData.UserId)
+					respData.SupplierId = subAccountData.SupplierId
+					respData.SubAccountID = subAccountData.SubAccountId
 				}
-				return "1", err
+				return 0, respData, nil
 			} else {
-				return "已认证的主账号存在", errors.New("auth fail")
+				return 2, nil, nil
 			}
 		}
-	} else if user != nil {
+	} else {
 		// 子账号存在,则无法注册
-		logrus.Debugf("[AuthCode] auth fail,phone:%+v", phone)
-		return "子账号存在", errors.New("auth fail")
+		logrus.Debugf("[AuthCode] auth fail,phone:%+v", req.PhoneNumber)
+		return 3, nil, nil
 	}
-	return "", nil
-
 }

+ 1 - 1
service/sub_account.go

@@ -16,7 +16,7 @@ type subaccount struct {
 }
 
 // CreateSubAccount 新增子账号
-func (*subaccount) CreateSubAccount(ctx context.Context, request http_model.AddNewSubAccountRequest) (*gorm_model.YounggeeSubAccount, error) {
+func (*subaccount) CreateSubAccount(ctx context.Context, request *http_model.AddNewSubAccountRequest) (*gorm_model.YounggeeSubAccount, error) {
 	user := gorm_model.YounggeeUser{
 		Phone:         request.PhoneNumber,
 		User:          "1002",