| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339 |
- package client
- import (
- "errors"
- "github.com/flipped-aurora/gin-vue-admin/server/global"
- "github.com/flipped-aurora/gin-vue-admin/server/model/client"
- clientReq "github.com/flipped-aurora/gin-vue-admin/server/model/client/request"
- "github.com/flipped-aurora/gin-vue-admin/server/model/common/response"
- "github.com/flipped-aurora/gin-vue-admin/server/model/system"
- systemReq "github.com/flipped-aurora/gin-vue-admin/server/model/system/request"
- systemRes "github.com/flipped-aurora/gin-vue-admin/server/model/system/response"
- "github.com/flipped-aurora/gin-vue-admin/server/service"
- "github.com/flipped-aurora/gin-vue-admin/server/utils"
- "github.com/gin-gonic/gin"
- "github.com/mojocn/base64Captcha"
- "github.com/redis/go-redis/v9"
- "go.uber.org/zap"
- "strconv"
- "time"
- )
- type ClientUserApi struct {
- }
- var clientUserService = service.ServiceGroupApp.ClientServiceGroup.ClientUserService
- var store = base64Captcha.DefaultMemStore
- func (clientUserApi *ClientUserApi) GetUserInfo(c *gin.Context) {
- userID := utils.GetUserID(c)
- id := strconv.Itoa(int(userID))
- if user, err := clientUserService.GetClientUser(id); err != nil {
- global.GVA_LOG.Error("查询失败!", zap.Error(err))
- response.FailWithMessage("查询失败", c)
- } else {
- response.OkWithData(user, c)
- }
- }
- func (clientUserApi *ClientUserApi) Login(c *gin.Context) {
- var l clientReq.Login
- err := c.ShouldBindJSON(&l)
- key := c.ClientIP()
- if err != nil {
- response.FailWithMessage(err.Error(), c)
- return
- }
- user, err := clientUserService.Login(&l)
- if err != nil {
- global.GVA_LOG.Error("登陆失败! 用户名不存在或者密码错误!", zap.Error(err))
- // 验证码次数+1
- global.BlackCache.Increment(key, 1)
- response.FailWithMessage(err.Error(), c)
- return
- }
- clientUserApi.TokenNext(c, user)
- return
- response.FailWithMessage("验证码错误", c)
- }
- func (clientUserApi *ClientUserApi) Register(c *gin.Context) {
- var register clientReq.CreateUser
- err := c.ShouldBindJSON(®ister)
- if err != nil {
- response.FailWithMessage(err.Error(), c)
- return
- }
- if register.Password != register.RePassword {
- response.FailWithMessage("两次输入的密码不一致", c)
- return
- }
- var clientUser client.ClientUser
- clientUser.Username = register.Username
- clientUser.Password = register.Password
- if err := clientUserService.CreateClientUser(&clientUser); err != nil {
- global.GVA_LOG.Error("创建失败!", zap.Error(err))
- response.FailWithMessage("创建失败", c)
- } else {
- response.OkWithMessage("创建成功", c)
- }
- }
- // CreateClientUser 创建客户端用户
- // @Tags ClientUser
- // @Summary 创建客户端用户
- // @Security ApiKeyAuth
- // @accept application/json
- // @Produce application/json
- // @Param data body client.ClientUser true "创建客户端用户"
- // @Success 200 {string} string "{"success":true,"data":{},"msg":"创建成功"}"
- // @Router /clientUser/createClientUser [post]
- func (clientUserApi *ClientUserApi) CreateClientUser(c *gin.Context) {
- var clientUser client.ClientUser
- err := c.ShouldBindJSON(&clientUser)
- if err != nil {
- response.FailWithMessage(err.Error(), c)
- return
- }
- clientUser.CreatedBy = utils.GetUserID(c)
- if err := clientUserService.CreateClientUser(&clientUser); err != nil {
- global.GVA_LOG.Error("创建失败!", zap.Error(err))
- response.FailWithMessage("创建失败", c)
- } else {
- response.OkWithMessage("创建成功", c)
- }
- }
- // DeleteClientUser 删除客户端用户
- // @Tags ClientUser
- // @Summary 删除客户端用户
- // @Security ApiKeyAuth
- // @accept application/json
- // @Produce application/json
- // @Param data body client.ClientUser true "删除客户端用户"
- // @Success 200 {string} string "{"success":true,"data":{},"msg":"删除成功"}"
- // @Router /clientUser/deleteClientUser [delete]
- func (clientUserApi *ClientUserApi) DeleteClientUser(c *gin.Context) {
- ID := c.Query("ID")
- userID := utils.GetUserID(c)
- if err := clientUserService.DeleteClientUser(ID, userID); err != nil {
- global.GVA_LOG.Error("删除失败!", zap.Error(err))
- response.FailWithMessage("删除失败", c)
- } else {
- response.OkWithMessage("删除成功", c)
- }
- }
- // DeleteClientUserByIds 批量删除客户端用户
- // @Tags ClientUser
- // @Summary 批量删除客户端用户
- // @Security ApiKeyAuth
- // @accept application/json
- // @Produce application/json
- // @Success 200 {string} string "{"success":true,"data":{},"msg":"批量删除成功"}"
- // @Router /clientUser/deleteClientUserByIds [delete]
- func (clientUserApi *ClientUserApi) DeleteClientUserByIds(c *gin.Context) {
- IDs := c.QueryArray("IDs[]")
- userID := utils.GetUserID(c)
- if err := clientUserService.DeleteClientUserByIds(IDs, userID); err != nil {
- global.GVA_LOG.Error("批量删除失败!", zap.Error(err))
- response.FailWithMessage("批量删除失败", c)
- } else {
- response.OkWithMessage("批量删除成功", c)
- }
- }
- // UpdateClientUser 更新客户端用户
- // @Tags ClientUser
- // @Summary 更新客户端用户
- // @Security ApiKeyAuth
- // @accept application/json
- // @Produce application/json
- // @Param data body client.ClientUser true "更新客户端用户"
- // @Success 200 {string} string "{"success":true,"data":{},"msg":"更新成功"}"
- // @Router /clientUser/updateClientUser [put]
- func (clientUserApi *ClientUserApi) UpdateClientUser(c *gin.Context) {
- var clientUserReq clientReq.UpdateUser
- err := c.ShouldBindJSON(&clientUserReq)
- if err != nil {
- response.FailWithMessage(err.Error(), c)
- return
- }
- var clientUser client.ClientUser
- clientUser.ID = clientUserReq.ID
- clientUser.Nickname = clientUserReq.Nickname
- clientUser.Gender = clientUserReq.Gender
- clientUser.Phone = clientUserReq.Phone
- clientUser.Email = clientUserReq.Email
- clientUser.Building = clientUserReq.Building
- clientUser.Room = clientUserReq.Room
- clientUser.Pen = clientUserReq.Pen
- if err := clientUserService.UpdateClientUser(clientUser); err != nil {
- global.GVA_LOG.Error("更新失败!", zap.Error(err))
- response.FailWithMessage("更新失败", c)
- } else {
- response.OkWithMessage("更新成功", c)
- }
- }
- // FindClientUser 用id查询客户端用户
- // @Tags ClientUser
- // @Summary 用id查询客户端用户
- // @Security ApiKeyAuth
- // @accept application/json
- // @Produce application/json
- // @Param data query client.ClientUser true "用id查询客户端用户"
- // @Success 200 {string} string "{"success":true,"data":{},"msg":"查询成功"}"
- // @Router /clientUser/findClientUser [get]
- func (clientUserApi *ClientUserApi) FindClientUser(c *gin.Context) {
- ID := c.Query("ID")
- if reclientUser, err := clientUserService.GetClientUser(ID); err != nil {
- global.GVA_LOG.Error("查询失败!", zap.Error(err))
- response.FailWithMessage("查询失败", c)
- } else {
- response.OkWithData(gin.H{"reclientUser": reclientUser}, c)
- }
- }
- // GetClientUserList 分页获取客户端用户列表
- // @Tags ClientUser
- // @Summary 分页获取客户端用户列表
- // @Security ApiKeyAuth
- // @accept application/json
- // @Produce application/json
- // @Param data query clientReq.ClientUserSearch true "分页获取客户端用户列表"
- // @Success 200 {string} string "{"success":true,"data":{},"msg":"获取成功"}"
- // @Router /clientUser/getClientUserList [get]
- func (clientUserApi *ClientUserApi) GetClientUserList(c *gin.Context) {
- var pageInfo clientReq.ClientUserSearch
- err := c.ShouldBindQuery(&pageInfo)
- if err != nil {
- response.FailWithMessage(err.Error(), c)
- return
- }
- if list, total, err := clientUserService.GetClientUserInfoList(pageInfo); err != nil {
- global.GVA_LOG.Error("获取失败!", zap.Error(err))
- response.FailWithMessage("获取失败", c)
- } else {
- response.OkWithDetailed(response.PageResult{
- List: list,
- Total: total,
- Page: pageInfo.Page,
- PageSize: pageInfo.PageSize,
- }, "获取成功", c)
- }
- }
- // GetClientUserPublic 不需要鉴权的客户端用户接口
- // @Tags ClientUser
- // @Summary 不需要鉴权的客户端用户接口
- // @accept application/json
- // @Produce application/json
- // @Param data query clientReq.ClientUserSearch true "分页获取客户端用户列表"
- // @Success 200 {string} string "{"success":true,"data":{},"msg":"获取成功"}"
- // @Router /clientUser/getClientUserList [get]
- func (clientUserApi *ClientUserApi) GetClientUserPublic(c *gin.Context) {
- // 此接口不需要鉴权
- // 示例为返回了一个固定的消息接口,一般本接口用于C端服务,需要自己实现业务逻辑
- response.OkWithDetailed(gin.H{
- "info": "不需要鉴权的客户端用户接口信息",
- }, "获取成功", c)
- }
- // TokenNext 登录以后签发jwt
- func (clientUserApi *ClientUserApi) TokenNext(c *gin.Context, user client.ClientUser) {
- j := &utils.JWT{SigningKey: []byte(global.GVA_CONFIG.JWT.SigningKey)} // 唯一签名
- claims := j.CreateClaims(systemReq.BaseClaims{
- UUID: user.UUID,
- ID: user.ID,
- NickName: user.Nickname,
- Username: user.Username,
- AuthorityId: 8080,
- })
- token, err := j.CreateToken(claims)
- if err != nil {
- global.GVA_LOG.Error("获取token失败!", zap.Error(err))
- response.FailWithMessage("获取token失败", c)
- return
- }
- if !global.GVA_CONFIG.System.UseMultipoint {
- utils.SetToken(c, token, int(claims.RegisteredClaims.ExpiresAt.Unix()-time.Now().Unix()))
- response.OkWithDetailed(systemRes.LoginResponse{
- User: user,
- Token: token,
- ExpiresAt: claims.RegisteredClaims.ExpiresAt.Unix() * 1000,
- }, "登录成功", c)
- return
- }
- if jwtStr, err := jwtService.GetRedisJWT(user.Username); errors.Is(err, redis.Nil) {
- if err := utils.SetRedisJWT(token, user.Username); err != nil {
- global.GVA_LOG.Error("设置登录状态失败!", zap.Error(err))
- response.FailWithMessage("设置登录状态失败", c)
- return
- }
- utils.SetToken(c, token, int(claims.RegisteredClaims.ExpiresAt.Unix()-time.Now().Unix()))
- response.OkWithDetailed(systemRes.LoginResponse{
- User: user,
- Token: token,
- ExpiresAt: claims.RegisteredClaims.ExpiresAt.Unix() * 1000,
- }, "登录成功", c)
- } else if err != nil {
- global.GVA_LOG.Error("设置登录状态失败!", zap.Error(err))
- response.FailWithMessage("设置登录状态失败", c)
- } else {
- var blackJWT system.JwtBlacklist
- blackJWT.Jwt = jwtStr
- if err := jwtService.JsonInBlacklist(blackJWT); err != nil {
- response.FailWithMessage("jwt作废失败", c)
- return
- }
- if err := utils.SetRedisJWT(token, user.Username); err != nil {
- response.FailWithMessage("设置登录状态失败", c)
- return
- }
- utils.SetToken(c, token, int(claims.RegisteredClaims.ExpiresAt.Unix()-time.Now().Unix()))
- response.OkWithDetailed(systemRes.LoginResponse{
- User: user,
- Token: token,
- ExpiresAt: claims.RegisteredClaims.ExpiresAt.Unix() * 1000,
- }, "登录成功", c)
- }
- }
- func (clientUserApi *ClientUserApi) ResetPassword(c *gin.Context) {
- var rps systemReq.ResetPassword
- err := c.ShouldBindJSON(&rps)
- if err != nil {
- response.FailWithMessage(err.Error(), c)
- return
- }
- err = clientUserService.ResetPassword(rps.ID, rps.Password)
- if err != nil {
- global.GVA_LOG.Error("重置失败!", zap.Error(err))
- response.FailWithMessage("重置失败"+err.Error(), c)
- return
- }
- response.OkWithMessage("重置成功", c)
- }
- // 类型转换
- func interfaceToInt(v interface{}) (i int) {
- switch v := v.(type) {
- case int:
- i = v
- default:
- i = 0
- }
- return
- }
|