浏览代码

add:添加用户认证功能和用户信息补全功能

zqbao 6 月之前
父节点
当前提交
7d7c203857
共有 6 个文件被更改,包括 257 次插入62 次删除
  1. 103 23
      controllers/user.go
  2. 12 5
      models/request/user.go
  3. 25 0
      models/sys_department.go
  4. 36 33
      models/user.go
  5. 18 0
      routers/commentsRouter.go
  6. 63 1
      services/user.go

+ 103 - 23
controllers/user.go

@@ -45,6 +45,14 @@ func (this *UserAuthController) Login() {
 		br.ErrMsg = "参数解析失败,Err:" + err.Error()
 		return
 	}
+	if req.RealName == "" {
+		br.Msg = "请输入姓名"
+		return
+	}
+	if req.SysDepartmentId <= 0 {
+		br.Msg = "请选择营业部门"
+		return
+	}
 
 	switch req.LoginType {
 	case 1:
@@ -75,7 +83,6 @@ func (this *UserAuthController) Login() {
 			br.Msg = "验证码错误,请重新输入"
 			return
 		}
-
 	case 2:
 		if req.Email == "" {
 			br.Msg = "请输入邮箱"
@@ -104,7 +111,7 @@ func (this *UserAuthController) Login() {
 			return
 		}
 	}
-	_, errMsg, err := services.BindUser(session.UnionId, session.OpenId, req.Phone, req.Email, req.AreaCode)
+	_, errMsg, err := services.BindUser(session.UnionId, session.OpenId, req.Phone, req.Email, req.AreaCode, req.SysDepartmentId, req.RealName)
 	if err != nil && err.Error() != utils.ErrNoRow() {
 		br.Msg = "登录失败,系统处理中,请稍后重试"
 		if errMsg != "" {
@@ -735,7 +742,7 @@ func (this *UserAuthController) Info() {
 	if user == nil {
 		user = &models.User{}
 	}
-	seller, err := models.GetSellerById(user.SellerId)
+	department, err := models.GetSysDepartmentById(user.SellerDepartmentId)
 	if err != nil && err.Error() != utils.ErrNoRow() {
 		br.Msg = "查询失败"
 		br.ErrMsg = "查询失败,系统异常,Err:" + err.Error()
@@ -762,13 +769,6 @@ func (this *UserAuthController) Info() {
 	for _, v := range userPermissionIds {
 		userPermissionMap[v] = struct{}{}
 	}
-	if seller == nil {
-		// 添加默认的销售电话
-		seller = &models.SysUser{
-			Phone:    utils.DefaultPhone,
-			AreaCode: utils.DefaultAreaCode,
-		}
-	}
 	var hasPermission string
 	for _, v := range private.Data {
 		for _, vv := range v.Child {
@@ -789,19 +789,17 @@ func (this *UserAuthController) Info() {
 	}
 
 	userView := &models.UserView{
-		Headimgurl:     miniconf["Logo"],
-		RealName:       user.RealName,
-		Phone:          user.Phone,
-		AreaCode:       user.AreaCode,
-		SellerName:     seller.SysRealName,
-		SellerPhone:    seller.Phone,
-		SellerAreaCode: seller.AreaCode,
-		HasPermission:  hasPermission,
-		Email:          user.Email,
-		Componey:       user.Company,
-		IsRegistered:   user.IsRegistered,
-		Status:         user.Status,
-		ValidEndTime:   user.ValidEndTime.Format(utils.FormatDate),
+		Headimgurl:           miniconf["Logo"],
+		RealName:             user.RealName,
+		Phone:                user.Phone,
+		AreaCode:             user.AreaCode,
+		SellerDepartmentName: department.SysDepartmentName,
+		HasPermission:        hasPermission,
+		Email:                user.Email,
+		Componey:             user.Company,
+		IsRegistered:         user.IsRegistered,
+		Status:               user.Status,
+		ValidEndTime:         user.ValidEndTime.Format(utils.FormatDate),
 	}
 
 	if user.ValidEndTime.IsZero() {
@@ -984,3 +982,85 @@ func (this *UserAuthController) PurchasedPermission() {
 	br.Success = true
 	br.Ret = 200
 }
+
+// UserInfoSave
+// @Title 用户信息补充
+// @Description 用户信息补充
+// @Param   request	body request.UserEidtReq true "type json string"
+// @Success Ret=200 保存成功
+// @router /info/save [post]
+func (this *UserAuthController) UserInfoSave() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+
+	var req request.UserInfoSaveReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	user := this.User
+	if user == nil {
+		br.Msg = "用户不存在"
+		return
+	}
+	if user.SellerDepartmentId > 0 {
+		req.SysDepartmentId = user.SellerDepartmentId
+	}
+	if user.RealName != "" {
+		req.RealName = user.RealName
+	}
+	msg, err := services.SaveUserInfo(user.UserId, req.SysDepartmentId, req.RealName)
+	if err != nil {
+		if msg == "" {
+			br.Msg = "保存失败"
+		} else {
+			br.Msg = msg
+		}
+		br.ErrMsg = "保存失败,系统异常,Err:" + err.Error()
+		return
+	}
+	if msg != "" {
+		br.Msg = msg
+		return
+	}
+
+	br.Msg = "用户信息保存成功"
+	br.Success = true
+	br.Ret = 200
+}
+
+// ApplyPermission
+// @Title 用户申请认证
+// @Description 用户申请认证
+// @Success Ret=200 获取成功
+// @router /apply/permission [post]
+func (this *UserAuthController) ApplyPermission() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	user := this.User
+
+	if user.ApplyStatus == 1 {
+		br.Msg = "您已提交过认证申请,请等待!"
+		return
+	}
+	user.ApplyStatus = 1
+	user.ApplyTime = time.Now()
+	err := user.Update([]string{"apply_status", "apply_time"})
+	if err != nil {
+		br.Msg = "提交认证申请失败"
+		br.ErrMsg = "提交认证申请失败,系统异常,Err:" + err.Error()
+		return
+	}
+
+	br.Msg = "认证申请,需要1~3个工作日"
+	br.Success = true
+	br.Ret = 200
+}

+ 12 - 5
models/request/user.go

@@ -9,11 +9,13 @@ package request
 // 	VerifyCode string `description:"短信/邮箱 验证码"`
 // }
 type LoginReq struct {
-	LoginType int    `description:"登录方式:1:手机,2:邮箱"`
-	Phone     string `description:"手机号"`
-	Email     string `description:"邮箱"`
-	AreaCode  string `description:"国际区号"`
-	SmsCode   string `description:"短信/邮箱验证码"`
+	LoginType       int    `description:"登录方式:1:手机,2:邮箱"`
+	Phone           string `description:"手机号"`
+	Email           string `description:"邮箱"`
+	AreaCode        string `description:"国际区号"`
+	SmsCode         string `description:"短信/邮箱验证码"`
+	SysDepartmentId int    `description:"营业部门id"`
+	RealName        string `description:"姓名"`
 }
 
 type VerifyCodeReq struct {
@@ -25,6 +27,11 @@ type VerifyCodeReq struct {
 	Email       string `description:"邮箱"`
 }
 
+type UserInfoSaveReq struct {
+	RealName        string `description:"姓名"`
+	SysDepartmentId int    `description:"营业部门id"`
+}
+
 type ReportRecordReq struct {
 	RecordId int `description:"记录Id"`
 	ReportId int `description:"报告Id"`

+ 25 - 0
models/sys_department.go

@@ -0,0 +1,25 @@
+package models
+
+import "github.com/beego/beego/v2/client/orm"
+
+type SysDepartment struct {
+	SysDepartmentId   int    `json:"sysDepartmentId"`
+	SysDepartmentName string `json:"sysDepartmentName"`
+	ParentId          int    `json:"sysDepartmentParentId"`
+	Sort              int    `json:"sysDepartmentSort"`
+	Level             int    `json:"level"`
+}
+
+func GetSysDepartmentByName(sysDepartmentName string) (item *SysDepartment, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM sys_department WHERE sys_department_name = ?`
+	err = o.Raw(sql, sysDepartmentName).QueryRow(&item)
+	return
+}
+
+func GetSysDepartmentById(sysDepartmentId int) (item *SysDepartment, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM sys_department WHERE sys_department_Id = ?`
+	err = o.Raw(sql, sysDepartmentId).QueryRow(&item)
+	return
+}

+ 36 - 33
models/user.go

@@ -7,26 +7,30 @@ import (
 )
 
 type User struct {
-	UserId         int       `orm:"pk" description:"用户id"`
-	OpenId         string    `description:"openid"`
-	UnionId        string    `description:"unionid"`
-	NickName       string    `description:"用户昵称"`
-	RealName       string    `description:"姓名"`
-	Phone          string    `description:"手机号"`
-	AreaCode       string    `description:"区号"`
-	Email          string    `description:"邮箱"`
-	SellerId       int       `description:"销售id(SysUserId)"`
-	Company        string    `description:"所属公司"`
-	ValidStartTime time.Time `description:"有效期开始时间"`
-	ValidEndTime   time.Time `description:"有效期结束时间"`
-	Status         int       `description:"用户类型: 0表示禁用,1表示潜在客户,2表示正式客户"`
-	CreateTime     time.Time `description:"系统中首次新增用户的时间"`
-	ModifyTime     time.Time `description:"系统中用户信息变更的时间"`
-	RegisterTime   time.Time `description:"用户首次登录小程序的时间"`
-	IsSubscribed   bool      `description:"是否关注公众号: 0表示没有关注,1表示关注"`
-	IsRegistered   bool      `description:"是否注册: 0表示没有注册,1表示注册"`
-	AccessToken    string    `description:"用户token"`
-	Headimgurl     string    `description:"用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空"`
+	UserId               int       `orm:"pk" description:"用户id"`
+	OpenId               string    `description:"openid"`
+	UnionId              string    `description:"unionid"`
+	NickName             string    `description:"用户昵称"`
+	RealName             string    `description:"姓名"`
+	Phone                string    `description:"手机号"`
+	AreaCode             string    `description:"区号"`
+	Email                string    `description:"邮箱"`
+	SellerId             int       `description:"销售id(SysUserId)"`
+	SellerDepartmentId   int       `description:"营业部门id"`
+	SellerDepartmentName string    `description:"营业部门名称"`
+	Company              string    `description:"所属公司"`
+	ValidStartTime       time.Time `description:"有效期开始时间"`
+	ValidEndTime         time.Time `description:"有效期结束时间"`
+	Status               int       `description:"用户类型: 0表示禁用,1表示潜在客户,2表示正式客户"`
+	ApplyStatus          int       `description:"申请状态: 0表示未申请,1表示已申请"`
+	CreateTime           time.Time `description:"系统中首次新增用户的时间"`
+	ModifyTime           time.Time `description:"系统中用户信息变更的时间"`
+	RegisterTime         time.Time `description:"用户首次登录小程序的时间"`
+	ApplyTime            time.Time `description:"用户提交申请的时间"`
+	IsSubscribed         bool      `description:"是否关注公众号: 0表示没有关注,1表示关注"`
+	IsRegistered         bool      `description:"是否注册: 0表示没有注册,1表示注册"`
+	AccessToken          string    `description:"用户token"`
+	Headimgurl           string    `description:"用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空"`
 }
 
 func (u *User) Insert() (insertId int64, err error) {
@@ -42,19 +46,18 @@ func (u *User) Update(cols []string) (err error) {
 }
 
 type UserView struct {
-	Headimgurl     string `description:"用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空"`
-	RealName       string `description:"用户实际名称"`
-	Phone          string `description:"手机号码"`
-	AreaCode       string `description:"区号"`
-	SellerName     string `description:"销售名称"`
-	SellerPhone    string `description:"销售电话"`
-	SellerAreaCode string `description:"销售电话区号"`
-	Email          string `description:"邮箱"`
-	Componey       string `description:"所属公司"`
-	HasPermission  string `description:"拥有权限"`
-	ValidEndTime   string `description:"服务截至时间"`
-	IsRegistered   bool   `description:"是否注册:1:已注册,0:未注册"`
-	Status         int    `description:"用户类型: 0表示禁用,1表示潜在客户,2表示正式客户"`
+	Headimgurl           string `description:"用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空"`
+	RealName             string `description:"用户实际名称"`
+	Phone                string `description:"手机号码"`
+	AreaCode             string `description:"区号"`
+	SellerDepartmentName string `description:"营业部名称"`
+	Email                string `description:"邮箱"`
+	Componey             string `description:"所属公司"`
+	HasPermission        string `description:"拥有权限"`
+	ValidEndTime         string `description:"服务截至时间"`
+	IsRegistered         bool   `description:"是否注册:1:已注册,0:未注册"`
+	Status               int    `description:"用户类型: 0表示禁用,1表示潜在客户,2表示正式客户"`
+	ApplyStatus          int    `description:"申请状态: 0表示未申请,1表示已申请"`
 }
 
 func GetUserByToken(token string) (item *User, err error) {

+ 18 - 0
routers/commentsRouter.go

@@ -304,6 +304,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_mini_api/controllers:UserAuthController"] = append(beego.GlobalControllerRouter["eta/eta_mini_api/controllers:UserAuthController"],
+        beego.ControllerComments{
+            Method: "ApplyPermission",
+            Router: `/apply/permission`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_mini_api/controllers:UserAuthController"] = append(beego.GlobalControllerRouter["eta/eta_mini_api/controllers:UserAuthController"],
         beego.ControllerComments{
             Method: "Info",
@@ -313,6 +322,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_mini_api/controllers:UserAuthController"] = append(beego.GlobalControllerRouter["eta/eta_mini_api/controllers:UserAuthController"],
+        beego.ControllerComments{
+            Method: "UserInfoSave",
+            Router: `/info/save`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_mini_api/controllers:UserAuthController"] = append(beego.GlobalControllerRouter["eta/eta_mini_api/controllers:UserAuthController"],
         beego.ControllerComments{
             Method: "Login",

+ 63 - 1
services/user.go

@@ -9,7 +9,7 @@ import (
 )
 
 // BindUser 用户绑定
-func BindUser(unionId, openId, phone, email, areaCode string) (userItem *models.User, errMsg string, err error) {
+func BindUser(unionId, openId, phone, email, areaCode string, departmentId int, realName string) (userItem *models.User, errMsg string, err error) {
 	if phone == "" && email == "" {
 		err = errors.New("手机号或邮箱必填一个")
 		return
@@ -153,5 +153,67 @@ func BindUser(unionId, openId, phone, email, areaCode string) (userItem *models.
 			return
 		}
 	}
+
+	msg, err := SaveUserInfo(userId, departmentId, realName)
+	if msg != "" {
+		errMsg = msg
+	}
+	return
+}
+
+// SaveUserInfo 保存用户信息
+func SaveUserInfo(userId, departmentId int, realName string) (msg string, err error) {
+	user, err := models.GetUserById(userId)
+	if err != nil {
+		return
+	}
+	updateCols := make([]string, 0)
+	if realName == "" {
+		if realName == "" {
+			msg = "请输入姓名"
+			return
+		}
+		user.RealName = realName
+		updateCols = append(updateCols, "real_name")
+	}
+	if user.SellerDepartmentName == "" || user.SellerDepartmentId == 0 {
+		if departmentId <= 0 {
+			msg = "请选择营业部门"
+			return
+		}
+		department, er := models.GetSysDepartmentById(departmentId)
+		if er != nil {
+			err = er
+			if err.Error() == utils.ErrNoRow() {
+				msg = "部门不存在,请刷新重试"
+				return
+			}
+			msg = "获取部门信息失败"
+			return
+		}
+		parentDepartment, er := models.GetSysDepartmentById(department.ParentId)
+		if er != nil {
+			err = er
+			if err.Error() == utils.ErrNoRow() {
+				msg = "父级部门不存在,请刷新重试"
+				return
+			}
+			msg = "获取部门信息失败"
+			return
+		}
+		if parentDepartment.SysDepartmentName != "营业部" {
+			msg = "部门信息异常"
+			return
+		}
+		user.SellerDepartmentName = department.SysDepartmentName
+		user.SellerDepartmentId = department.SysDepartmentId
+		updateCols = append(updateCols, "seller_department_name")
+		updateCols = append(updateCols, "seller_department_id")
+	}
+	err = user.Update(updateCols)
+	if err != nil {
+		msg = "用户信息保存失败"
+		return
+	}
 	return
 }