✨ Init
This commit is contained in:
		
							
								
								
									
										18
									
								
								api/v1/app/enter.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								api/v1/app/enter.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
package app
 | 
			
		||||
 | 
			
		||||
import "miniapp/service"
 | 
			
		||||
 | 
			
		||||
type ApiGroup struct {
 | 
			
		||||
	UserApi
 | 
			
		||||
	LoginApi
 | 
			
		||||
	FavoriteApi
 | 
			
		||||
	VisionApi
 | 
			
		||||
	TodosApi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	userService     = service.ServiceGroupApp.AppServiceGroup.UserService
 | 
			
		||||
	favoriteService = service.ServiceGroupApp.AppServiceGroup.FavoriteService
 | 
			
		||||
	visionService   = service.ServiceGroupApp.AppServiceGroup.VisionService
 | 
			
		||||
	todosService    = service.ServiceGroupApp.AppServiceGroup.TodesService
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										80
									
								
								api/v1/app/favorite.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								api/v1/app/favorite.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,80 @@
 | 
			
		||||
package app
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/gin-gonic/gin"
 | 
			
		||||
	"go.uber.org/zap"
 | 
			
		||||
	"miniapp/global"
 | 
			
		||||
	"miniapp/model/app"
 | 
			
		||||
	"miniapp/model/app/request"
 | 
			
		||||
	r "miniapp/model/common/response"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type FavoriteApi struct{}
 | 
			
		||||
 | 
			
		||||
// GetList 获取收藏列表
 | 
			
		||||
func (f *FavoriteApi) GetList(ctx *gin.Context) {
 | 
			
		||||
	var p request.GetFavoriteList
 | 
			
		||||
 | 
			
		||||
	if err := ctx.ShouldBind(&p); err != nil {
 | 
			
		||||
		r.FailWithMessage(err.Error(), ctx)
 | 
			
		||||
		global.GVA_LOG.Error("获取收藏列表失败", zap.Error(err))
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 获取收藏列表
 | 
			
		||||
	err, list, total := favoriteService.GetFavoriteList(p)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		r.FailWithMessage(err.Error(), ctx)
 | 
			
		||||
		global.GVA_LOG.Error("获取收藏列表失败", zap.Error(err))
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	r.OkWithData(r.PageResult{
 | 
			
		||||
		List:     list,
 | 
			
		||||
		Total:    total,
 | 
			
		||||
		Page:     p.Page,
 | 
			
		||||
		PageSize: p.PageSize,
 | 
			
		||||
	}, ctx)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Create 创建收藏
 | 
			
		||||
func (f *FavoriteApi) Create(ctx *gin.Context) {
 | 
			
		||||
	var p app.Favorite
 | 
			
		||||
 | 
			
		||||
	if err := ctx.ShouldBind(&p); err != nil {
 | 
			
		||||
		r.FailWithMessage(err.Error(), ctx)
 | 
			
		||||
		global.GVA_LOG.Error("创建收藏失败", zap.Error(err))
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 创建收藏
 | 
			
		||||
	err := favoriteService.CreateFavorite(&p)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		r.FailWithMessage(err.Error(), ctx)
 | 
			
		||||
		global.GVA_LOG.Error("创建收藏失败", zap.Error(err))
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	r.Ok(ctx)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Delete 删除收藏
 | 
			
		||||
func (f *FavoriteApi) Delete(ctx *gin.Context) {
 | 
			
		||||
	var p app.Favorite
 | 
			
		||||
 | 
			
		||||
	if err := ctx.ShouldBind(&p); err != nil {
 | 
			
		||||
		r.FailWithMessage(err.Error(), ctx)
 | 
			
		||||
		global.GVA_LOG.Error("删除收藏失败", zap.Error(err))
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 删除收藏
 | 
			
		||||
	err := favoriteService.DeleteFavorite(&p)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		r.FailWithMessage(err.Error(), ctx)
 | 
			
		||||
		global.GVA_LOG.Error("删除收藏失败", zap.Error(err))
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	r.Ok(ctx)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										120
									
								
								api/v1/app/login.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										120
									
								
								api/v1/app/login.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,120 @@
 | 
			
		||||
package app
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"git.echol.cn/loser/logger/log"
 | 
			
		||||
	"github.com/gin-gonic/gin"
 | 
			
		||||
	"miniapp/global"
 | 
			
		||||
	"miniapp/model/app/request"
 | 
			
		||||
	"miniapp/model/common/constant"
 | 
			
		||||
	r "miniapp/model/common/response"
 | 
			
		||||
	"miniapp/oauth2"
 | 
			
		||||
	"miniapp/service"
 | 
			
		||||
	"net/http"
 | 
			
		||||
	"net/url"
 | 
			
		||||
	"strconv"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type LoginApi struct{}
 | 
			
		||||
 | 
			
		||||
// Login 登录
 | 
			
		||||
func (l *LoginApi) Login(ctx *gin.Context) {
 | 
			
		||||
	var p request.Login
 | 
			
		||||
	if err := ctx.ShouldBind(&p); err != nil {
 | 
			
		||||
		r.FailWithMessage(err.Error(), ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	// 获取用户基础账号信息
 | 
			
		||||
 | 
			
		||||
	userId, err := oauth2.OAuthServer.UserAuthorizationHandler(ctx.Writer, ctx.Request)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Errorf("获取用户基础账号信息失败: %v", err)
 | 
			
		||||
		r.FailWithMessage(err.Error(), ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	// 重新组装登录参数
 | 
			
		||||
	ctx.Request.Form = url.Values{
 | 
			
		||||
		"username":   {userId},
 | 
			
		||||
		"password":   {p.Password},
 | 
			
		||||
		"scope":      {"ALL"},
 | 
			
		||||
		"grant_type": {"password"},
 | 
			
		||||
		"nickName":   {p.NickName},
 | 
			
		||||
		"avatarUrl":  {p.AvatarUrl},
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 参数解析成功,进行登录
 | 
			
		||||
	if err = oauth2.OAuthServer.HandleTokenRequest(ctx.Writer, ctx.Request); err != nil {
 | 
			
		||||
		log.Errorf("登录失败:%s", err.Error())
 | 
			
		||||
		r.FailWithMessage(err.Error(), ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	// 登录成功才更新登录时间
 | 
			
		||||
	if ctx.Writer.Status() == http.StatusOK {
 | 
			
		||||
		// 登录成功,更新登录时间和IP
 | 
			
		||||
		uid, _ := strconv.Atoi(userId)
 | 
			
		||||
		go service.ServiceGroupApp.AppServiceGroup.UserService.UpdateLastLoginInfo(uid)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Refresh 刷新登录Token
 | 
			
		||||
func (l *LoginApi) Refresh(ctx *gin.Context) {
 | 
			
		||||
	var p request.RefreshToken
 | 
			
		||||
	if err := ctx.ShouldBind(&p); err != nil {
 | 
			
		||||
		r.FailWithMessage("参数错误: "+err.Error(), ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 刷新Token
 | 
			
		||||
	if err := oauth2.OAuthServer.HandleTokenRequest(ctx.Writer, ctx.Request); err != nil {
 | 
			
		||||
		log.Errorf("Token数据返回失败: %v", err.Error())
 | 
			
		||||
 | 
			
		||||
		r.FailWithMessage(err.Error(), ctx)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Logout 退出登录
 | 
			
		||||
func (l *LoginApi) Logout(ctx *gin.Context) {
 | 
			
		||||
	log.Debug("退出登录啦")
 | 
			
		||||
	// Token字符串前缀
 | 
			
		||||
	const bearerSchema string = "Bearer "
 | 
			
		||||
	// 取出Token
 | 
			
		||||
	tokenHeader := ctx.Request.Header.Get("Authorization")
 | 
			
		||||
	tokenStr := tokenHeader[len(bearerSchema):]
 | 
			
		||||
	// 取出原始RedisKey
 | 
			
		||||
	baseDataId, err := global.GVA_REDIS.Get(context.Background(), constant.OAuth2RedisKey+tokenStr).Result()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		r.FailWithMessage("Token信息获取失败", ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	baseDataStr, err := global.GVA_REDIS.Get(context.Background(), constant.OAuth2RedisKey+baseDataId).Result()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		r.FailWithMessage("Token信息获取失败", ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	// 转换数据为Map
 | 
			
		||||
	tokenData := make(map[string]any)
 | 
			
		||||
	if err = json.Unmarshal([]byte(baseDataStr), &tokenData); err != nil {
 | 
			
		||||
		r.FailWithMessage("系统错误: "+err.Error(), ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	// 删除Redis缓存的数据
 | 
			
		||||
	global.GVA_REDIS.Del(context.Background(), constant.OAuth2RedisKey+baseDataId)
 | 
			
		||||
	global.GVA_REDIS.Del(context.Background(), fmt.Sprintf("%v%v", constant.OAuth2RedisKey, tokenData["Access"]))
 | 
			
		||||
	global.GVA_REDIS.Del(context.Background(), fmt.Sprintf("%v%v", constant.OAuth2RedisKey, tokenData["Refresh"]))
 | 
			
		||||
 | 
			
		||||
	r.Ok(ctx)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (l *LoginApi) GetWeChatToken(c *gin.Context) {
 | 
			
		||||
	wechaetToken, err := http.Get("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx3d38ce1103a82225&secret=3c41ca428b4d0f43cfaef6f567a1cc06")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Errorf("获取微信Token失败: %v", err)
 | 
			
		||||
		r.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	r.OkWithData(wechaetToken, c)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										49
									
								
								api/v1/app/todos.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								api/v1/app/todos.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,49 @@
 | 
			
		||||
package app
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/gin-gonic/gin"
 | 
			
		||||
	"go.uber.org/zap"
 | 
			
		||||
	"miniapp/api"
 | 
			
		||||
	"miniapp/global"
 | 
			
		||||
	"miniapp/model/app"
 | 
			
		||||
	"miniapp/model/common"
 | 
			
		||||
	r "miniapp/model/common/response"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type TodosApi struct{}
 | 
			
		||||
 | 
			
		||||
func (t TodosApi) GetUserTodos(ctx *gin.Context) {
 | 
			
		||||
 | 
			
		||||
	var ue app.User
 | 
			
		||||
	if api.GetUser(ctx, &ue, false, true); ctx.IsAborted() {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	list, err := todosService.GetUserTodos(ue.ID)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		r.FailWithMessage("获取Todo列表失败:"+err.Error(), ctx)
 | 
			
		||||
		global.GVA_LOG.Error("获取Todo列表失败", zap.Error(err))
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	r.OkWithData(list, ctx)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UpdateTodo 更新Todo
 | 
			
		||||
func (t TodosApi) UpdateTodo(ctx *gin.Context) {
 | 
			
		||||
	var todo common.UserTodo
 | 
			
		||||
	if err := ctx.ShouldBind(&todo); err != nil {
 | 
			
		||||
		r.FailWithMessage("参数错误:"+err.Error(), ctx)
 | 
			
		||||
		global.GVA_LOG.Error("参数错误", zap.Error(err))
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 更新
 | 
			
		||||
	err := todosService.UpdateTodoById(&todo)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		r.FailWithMessage(err.Error(), ctx)
 | 
			
		||||
		global.GVA_LOG.Error("更新失败", zap.Error(err))
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	r.Ok(ctx)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										134
									
								
								api/v1/app/user.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										134
									
								
								api/v1/app/user.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,134 @@
 | 
			
		||||
package app
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"git.echol.cn/loser/logger/log"
 | 
			
		||||
	"github.com/gin-gonic/gin"
 | 
			
		||||
	"miniapp/api"
 | 
			
		||||
	"miniapp/global"
 | 
			
		||||
	"miniapp/model/app"
 | 
			
		||||
	"miniapp/model/app/request"
 | 
			
		||||
	"miniapp/model/app/response"
 | 
			
		||||
	r "miniapp/model/common/response"
 | 
			
		||||
	"miniapp/utils"
 | 
			
		||||
	"strings"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type UserApi struct {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetUser 获取当前登录用户信息
 | 
			
		||||
func (u *UserApi) GetUser(ctx *gin.Context) {
 | 
			
		||||
	// 取出当前登录用户
 | 
			
		||||
	var ue app.User
 | 
			
		||||
	if api.GetUser(ctx, &ue, false, true); ctx.IsAborted() {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	// 转换为VO
 | 
			
		||||
	var v response.UserVO
 | 
			
		||||
	v.ParseOrdinary(ue)
 | 
			
		||||
 | 
			
		||||
	r.OkWithData(v, ctx)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// BindingWeChat 绑定微信
 | 
			
		||||
func (u *UserApi) BindingWeChat(ctx *gin.Context) {
 | 
			
		||||
	var p request.BindingWeChat
 | 
			
		||||
	if err := ctx.ShouldBind(&p); err != nil {
 | 
			
		||||
		r.FailWithMessage("参数错误"+err.Error(), ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 取出当前登录用户
 | 
			
		||||
	var loginUser app.User
 | 
			
		||||
	if api.GetUser(ctx, &loginUser, true, true); ctx.IsAborted() {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 解析出UnionId和OpenId
 | 
			
		||||
	unionId, openId, _, err := utils.WeChatUtils().GetWechatUnionId(p.Code)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Errorf("获取微信UnionId失败:%s", err.Error())
 | 
			
		||||
		r.FailWithMessage("系统错误,请稍后再试", ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 解析成功,修改用户信息
 | 
			
		||||
	loginUser.WechatUnionId = &unionId
 | 
			
		||||
	loginUser.WechatOpenId = &openId
 | 
			
		||||
	if err = userService.UpdateUserInfo(&loginUser); err != nil {
 | 
			
		||||
		log.Errorf("修改用户信息失败:%s", err.Error())
 | 
			
		||||
		r.FailWithMessage("系统错误,请稍后再试", ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	r.Ok(ctx)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UpdateUser 修改用户信息
 | 
			
		||||
func (u *UserApi) UpdateUser(ctx *gin.Context) {
 | 
			
		||||
	var p request.ChangeUserInfo
 | 
			
		||||
	if err := ctx.ShouldBind(&p); err != nil {
 | 
			
		||||
		r.FailWithMessage("参数错误: "+err.Error(), ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	// 获取当前登录用户
 | 
			
		||||
	var loginUser app.User
 | 
			
		||||
	if api.GetUser(ctx, &loginUser, false, true); ctx.IsAborted() {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	// 修改资料
 | 
			
		||||
 | 
			
		||||
	if p.Nickname != "" {
 | 
			
		||||
		loginUser.Nickname = p.Nickname
 | 
			
		||||
	}
 | 
			
		||||
	if p.Avatar != "" && strings.HasPrefix(p.Avatar, "http") {
 | 
			
		||||
		loginUser.Avatar = p.Avatar
 | 
			
		||||
	}
 | 
			
		||||
	if p.Phone != "" {
 | 
			
		||||
		loginUser.Phone = p.Phone
 | 
			
		||||
	}
 | 
			
		||||
	// 修改数据
 | 
			
		||||
	if err := userService.UpdateUserInfo(&loginUser); err != nil {
 | 
			
		||||
		log.Errorf("修改用户信息失败:%s", err.Error())
 | 
			
		||||
		r.FailWithMessage("修改用户信息失败"+err.Error(), ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	// 操作成功,更新头像和昵称
 | 
			
		||||
	r.Ok(ctx)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UpdateUserHospital 修改用户医院信息
 | 
			
		||||
func (u *UserApi) UpdateUserHospital(ctx *gin.Context) {
 | 
			
		||||
	var p request.ChangeUserHospital
 | 
			
		||||
	if err := ctx.ShouldBind(&p); err != nil {
 | 
			
		||||
		r.FailWithMessage("参数错误: "+err.Error(), ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 修改数据
 | 
			
		||||
	if err := userService.UpdateUserHospital(&p); err != nil {
 | 
			
		||||
		log.Errorf("修改用户信息失败:%s", err.Error())
 | 
			
		||||
		r.FailWithMessage("修改用户信息失败"+err.Error(), ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	// 操作成功,更新头像和昵称
 | 
			
		||||
	r.Ok(ctx)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetInfo 获取用户信息
 | 
			
		||||
func (u *UserApi) GetInfo(ctx *gin.Context) {
 | 
			
		||||
	id := ctx.Param("id")
 | 
			
		||||
	if id == "" {
 | 
			
		||||
		global.GVA_LOG.Error("参数错误")
 | 
			
		||||
		r.FailWithMessage("参数错误", ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 获取用户信息
 | 
			
		||||
	userInfo, err := userService.GetUserInfo(id)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Errorf("获取用户信息失败:%s", err.Error())
 | 
			
		||||
		r.FailWithMessage("获取用户信息失败"+err.Error(), ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	r.OkWithData(userInfo, ctx)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										56
									
								
								api/v1/app/vision.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								api/v1/app/vision.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,56 @@
 | 
			
		||||
package app
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/gin-gonic/gin"
 | 
			
		||||
	"go.uber.org/zap"
 | 
			
		||||
	"miniapp/global"
 | 
			
		||||
	"miniapp/model/app"
 | 
			
		||||
	"miniapp/model/app/request"
 | 
			
		||||
	r "miniapp/model/common/response"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type VisionApi struct{}
 | 
			
		||||
 | 
			
		||||
func (VisionApi) GetList(ctx *gin.Context) {
 | 
			
		||||
	var p request.VisionListRequest
 | 
			
		||||
	if err := ctx.ShouldBind(&p); err != nil {
 | 
			
		||||
		r.FailWithMessage("参数错误:"+err.Error(), ctx)
 | 
			
		||||
		global.GVA_LOG.Error("参数错误", zap.Error(err))
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 获取列表
 | 
			
		||||
	list, total, err := visionService.GetVisionList(p)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		r.FailWithMessage(err.Error(), ctx)
 | 
			
		||||
		global.GVA_LOG.Error("获取列表失败", zap.Error(err))
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	r.OkWithData(r.PageResult{
 | 
			
		||||
		List:     list,
 | 
			
		||||
		Total:    total,
 | 
			
		||||
		Page:     p.Page,
 | 
			
		||||
		PageSize: p.PageSize,
 | 
			
		||||
	}, ctx)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (VisionApi) Create(ctx *gin.Context) {
 | 
			
		||||
	var p app.Vision
 | 
			
		||||
 | 
			
		||||
	if err := ctx.ShouldBind(&p); err != nil {
 | 
			
		||||
		r.FailWithMessage(err.Error(), ctx)
 | 
			
		||||
		global.GVA_LOG.Error("参数错误", zap.Error(err))
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 创建
 | 
			
		||||
	err := visionService.CreateVision(&p)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		r.FailWithMessage(err.Error(), ctx)
 | 
			
		||||
		global.GVA_LOG.Error("创建失败", zap.Error(err))
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	r.Ok(ctx)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										15
									
								
								api/v1/enter.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								api/v1/enter.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
			
		||||
package v1
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"miniapp/api/v1/app"
 | 
			
		||||
	"miniapp/api/v1/example"
 | 
			
		||||
	"miniapp/api/v1/system"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type ApiGroup struct {
 | 
			
		||||
	SystemApiGroup  system.ApiGroup
 | 
			
		||||
	ExampleApiGroup example.ApiGroup
 | 
			
		||||
	AppApiGroup     app.ApiGroup
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var ApiGroupApp = new(ApiGroup)
 | 
			
		||||
							
								
								
									
										13
									
								
								api/v1/example/enter.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								api/v1/example/enter.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
package example
 | 
			
		||||
 | 
			
		||||
import "miniapp/service"
 | 
			
		||||
 | 
			
		||||
type ApiGroup struct {
 | 
			
		||||
	CustomerApi
 | 
			
		||||
	FileUploadAndDownloadApi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	customerService              = service.ServiceGroupApp.ExampleServiceGroup.CustomerService
 | 
			
		||||
	fileUploadAndDownloadService = service.ServiceGroupApp.ExampleServiceGroup.FileUploadAndDownloadService
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										150
									
								
								api/v1/example/exa_breakpoint_continue.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										150
									
								
								api/v1/example/exa_breakpoint_continue.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,150 @@
 | 
			
		||||
package example
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"io"
 | 
			
		||||
	"mime/multipart"
 | 
			
		||||
	"strconv"
 | 
			
		||||
 | 
			
		||||
	"miniapp/model/example"
 | 
			
		||||
 | 
			
		||||
	"github.com/gin-gonic/gin"
 | 
			
		||||
	"go.uber.org/zap"
 | 
			
		||||
	"miniapp/global"
 | 
			
		||||
	"miniapp/model/common/response"
 | 
			
		||||
	exampleRes "miniapp/model/example/response"
 | 
			
		||||
	"miniapp/utils"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// BreakpointContinue
 | 
			
		||||
// @Tags      ExaFileUploadAndDownload
 | 
			
		||||
// @Summary   断点续传到服务器
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    multipart/form-data
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     file  formData  file                           true  "an example for breakpoint resume, 断点续传示例"
 | 
			
		||||
// @Success   200   {object}  response.Response{msg=string}  "断点续传到服务器"
 | 
			
		||||
// @Router    /fileUploadAndDownload/breakpointContinue [post]
 | 
			
		||||
func (b *FileUploadAndDownloadApi) BreakpointContinue(c *gin.Context) {
 | 
			
		||||
	fileMd5 := c.Request.FormValue("fileMd5")
 | 
			
		||||
	fileName := c.Request.FormValue("fileName")
 | 
			
		||||
	chunkMd5 := c.Request.FormValue("chunkMd5")
 | 
			
		||||
	chunkNumber, _ := strconv.Atoi(c.Request.FormValue("chunkNumber"))
 | 
			
		||||
	chunkTotal, _ := strconv.Atoi(c.Request.FormValue("chunkTotal"))
 | 
			
		||||
	_, FileHeader, err := c.Request.FormFile("file")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("接收文件失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("接收文件失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	f, err := FileHeader.Open()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("文件读取失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("文件读取失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	defer func(f multipart.File) {
 | 
			
		||||
		err := f.Close()
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			fmt.Println(err)
 | 
			
		||||
		}
 | 
			
		||||
	}(f)
 | 
			
		||||
	cen, _ := io.ReadAll(f)
 | 
			
		||||
	if !utils.CheckMd5(cen, chunkMd5) {
 | 
			
		||||
		global.GVA_LOG.Error("检查md5失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("检查md5失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	file, err := fileUploadAndDownloadService.FindOrCreateFile(fileMd5, fileName, chunkTotal)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("查找或创建记录失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("查找或创建记录失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	pathC, err := utils.BreakPointContinue(cen, fileName, chunkNumber, chunkTotal, fileMd5)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("断点续传失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("断点续传失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if err = fileUploadAndDownloadService.CreateFileChunk(file.ID, pathC, chunkNumber); err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("创建文件记录失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("创建文件记录失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithMessage("切片创建成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// FindFile
 | 
			
		||||
// @Tags      ExaFileUploadAndDownload
 | 
			
		||||
// @Summary   查找文件
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    multipart/form-data
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     file  formData  file                                                        true  "Find the file, 查找文件"
 | 
			
		||||
// @Success   200   {object}  response.Response{data=exampleRes.FileResponse,msg=string}  "查找文件,返回包括文件详情"
 | 
			
		||||
// @Router    /fileUploadAndDownload/findFile [post]
 | 
			
		||||
func (b *FileUploadAndDownloadApi) FindFile(c *gin.Context) {
 | 
			
		||||
	fileMd5 := c.Query("fileMd5")
 | 
			
		||||
	fileName := c.Query("fileName")
 | 
			
		||||
	chunkTotal, _ := strconv.Atoi(c.Query("chunkTotal"))
 | 
			
		||||
	file, err := fileUploadAndDownloadService.FindOrCreateFile(fileMd5, fileName, chunkTotal)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("查找失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("查找失败", c)
 | 
			
		||||
	} else {
 | 
			
		||||
		response.OkWithDetailed(exampleRes.FileResponse{File: file}, "查找成功", c)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// BreakpointContinueFinish
 | 
			
		||||
// @Tags      ExaFileUploadAndDownload
 | 
			
		||||
// @Summary   创建文件
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    multipart/form-data
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     file  formData  file                                                            true  "上传文件完成"
 | 
			
		||||
// @Success   200   {object}  response.Response{data=exampleRes.FilePathResponse,msg=string}  "创建文件,返回包括文件路径"
 | 
			
		||||
// @Router    /fileUploadAndDownload/findFile [post]
 | 
			
		||||
func (b *FileUploadAndDownloadApi) BreakpointContinueFinish(c *gin.Context) {
 | 
			
		||||
	fileMd5 := c.Query("fileMd5")
 | 
			
		||||
	fileName := c.Query("fileName")
 | 
			
		||||
	filePath, err := utils.MakeFile(fileName, fileMd5)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("文件创建失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithDetailed(exampleRes.FilePathResponse{FilePath: filePath}, "文件创建失败", c)
 | 
			
		||||
	} else {
 | 
			
		||||
		response.OkWithDetailed(exampleRes.FilePathResponse{FilePath: filePath}, "文件创建成功", c)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// RemoveChunk
 | 
			
		||||
// @Tags      ExaFileUploadAndDownload
 | 
			
		||||
// @Summary   删除切片
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    multipart/form-data
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     file  formData  file                           true  "删除缓存切片"
 | 
			
		||||
// @Success   200   {object}  response.Response{msg=string}  "删除切片"
 | 
			
		||||
// @Router    /fileUploadAndDownload/removeChunk [post]
 | 
			
		||||
func (b *FileUploadAndDownloadApi) RemoveChunk(c *gin.Context) {
 | 
			
		||||
	var file example.ExaFile
 | 
			
		||||
	err := c.ShouldBindJSON(&file)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = utils.RemoveChunk(file.FileMd5)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("缓存切片删除失败!", zap.Error(err))
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = fileUploadAndDownloadService.DeleteFileChunk(file.FileMd5, file.FilePath)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error(err.Error(), zap.Error(err))
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithMessage("缓存切片删除成功", c)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										176
									
								
								api/v1/example/exa_customer.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										176
									
								
								api/v1/example/exa_customer.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,176 @@
 | 
			
		||||
package example
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/gin-gonic/gin"
 | 
			
		||||
	"go.uber.org/zap"
 | 
			
		||||
	"miniapp/global"
 | 
			
		||||
	"miniapp/model/common/request"
 | 
			
		||||
	"miniapp/model/common/response"
 | 
			
		||||
	"miniapp/model/example"
 | 
			
		||||
	exampleRes "miniapp/model/example/response"
 | 
			
		||||
	"miniapp/utils"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type CustomerApi struct{}
 | 
			
		||||
 | 
			
		||||
// CreateExaCustomer
 | 
			
		||||
// @Tags      ExaCustomer
 | 
			
		||||
// @Summary   创建客户
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      example.ExaCustomer            true  "客户用户名, 客户手机号码"
 | 
			
		||||
// @Success   200   {object}  response.Response{msg=string}  "创建客户"
 | 
			
		||||
// @Router    /customer/customer [post]
 | 
			
		||||
func (e *CustomerApi) CreateExaCustomer(c *gin.Context) {
 | 
			
		||||
	var customer example.ExaCustomer
 | 
			
		||||
	err := c.ShouldBindJSON(&customer)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = utils.Verify(customer, utils.CustomerVerify)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	customer.SysUserID = utils.GetUserID(c)
 | 
			
		||||
	customer.SysUserAuthorityID = utils.GetUserAuthorityId(c)
 | 
			
		||||
	err = customerService.CreateExaCustomer(customer)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("创建失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("创建失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithMessage("创建成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// DeleteExaCustomer
 | 
			
		||||
// @Tags      ExaCustomer
 | 
			
		||||
// @Summary   删除客户
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      example.ExaCustomer            true  "客户ID"
 | 
			
		||||
// @Success   200   {object}  response.Response{msg=string}  "删除客户"
 | 
			
		||||
// @Router    /customer/customer [delete]
 | 
			
		||||
func (e *CustomerApi) DeleteExaCustomer(c *gin.Context) {
 | 
			
		||||
	var customer example.ExaCustomer
 | 
			
		||||
	err := c.ShouldBindJSON(&customer)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = utils.Verify(customer.GVA_MODEL, utils.IdVerify)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = customerService.DeleteExaCustomer(customer)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("删除失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("删除失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithMessage("删除成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UpdateExaCustomer
 | 
			
		||||
// @Tags      ExaCustomer
 | 
			
		||||
// @Summary   更新客户信息
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      example.ExaCustomer            true  "客户ID, 客户信息"
 | 
			
		||||
// @Success   200   {object}  response.Response{msg=string}  "更新客户信息"
 | 
			
		||||
// @Router    /customer/customer [put]
 | 
			
		||||
func (e *CustomerApi) UpdateExaCustomer(c *gin.Context) {
 | 
			
		||||
	var customer example.ExaCustomer
 | 
			
		||||
	err := c.ShouldBindJSON(&customer)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = utils.Verify(customer.GVA_MODEL, utils.IdVerify)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = utils.Verify(customer, utils.CustomerVerify)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = customerService.UpdateExaCustomer(&customer)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("更新失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("更新失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithMessage("更新成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetExaCustomer
 | 
			
		||||
// @Tags      ExaCustomer
 | 
			
		||||
// @Summary   获取单一客户信息
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  query     example.ExaCustomer                                                true  "客户ID"
 | 
			
		||||
// @Success   200   {object}  response.Response{data=exampleRes.ExaCustomerResponse,msg=string}  "获取单一客户信息,返回包括客户详情"
 | 
			
		||||
// @Router    /customer/customer [get]
 | 
			
		||||
func (e *CustomerApi) GetExaCustomer(c *gin.Context) {
 | 
			
		||||
	var customer example.ExaCustomer
 | 
			
		||||
	err := c.ShouldBindQuery(&customer)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = utils.Verify(customer.GVA_MODEL, utils.IdVerify)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	data, err := customerService.GetExaCustomer(customer.ID)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("获取失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("获取失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithDetailed(exampleRes.ExaCustomerResponse{Customer: data}, "获取成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetExaCustomerList
 | 
			
		||||
// @Tags      ExaCustomer
 | 
			
		||||
// @Summary   分页获取权限客户列表
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  query     request.PageInfo                                        true  "页码, 每页大小"
 | 
			
		||||
// @Success   200   {object}  response.Response{data=response.PageResult,msg=string}  "分页获取权限客户列表,返回包括列表,总数,页码,每页数量"
 | 
			
		||||
// @Router    /customer/customerList [get]
 | 
			
		||||
func (e *CustomerApi) GetExaCustomerList(c *gin.Context) {
 | 
			
		||||
	var pageInfo request.PageInfo
 | 
			
		||||
	err := c.ShouldBindQuery(&pageInfo)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = utils.Verify(pageInfo, utils.PageInfoVerify)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	customerList, total, err := customerService.GetCustomerInfoList(utils.GetUserAuthorityId(c), pageInfo)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("获取失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("获取失败"+err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithDetailed(response.PageResult{
 | 
			
		||||
		List:     customerList,
 | 
			
		||||
		Total:    total,
 | 
			
		||||
		Page:     pageInfo.Page,
 | 
			
		||||
		PageSize: pageInfo.PageSize,
 | 
			
		||||
	}, "获取成功", c)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										110
									
								
								api/v1/example/exa_file_upload_download.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										110
									
								
								api/v1/example/exa_file_upload_download.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,110 @@
 | 
			
		||||
package example
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/gin-gonic/gin"
 | 
			
		||||
	"go.uber.org/zap"
 | 
			
		||||
	"miniapp/global"
 | 
			
		||||
	"miniapp/model/common/request"
 | 
			
		||||
	"miniapp/model/common/response"
 | 
			
		||||
	"miniapp/model/example"
 | 
			
		||||
	exampleRes "miniapp/model/example/response"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type FileUploadAndDownloadApi struct{}
 | 
			
		||||
 | 
			
		||||
// UploadFile
 | 
			
		||||
// @Tags      ExaFileUploadAndDownload
 | 
			
		||||
// @Summary   上传文件示例
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    multipart/form-data
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     file  formData  file                                                           true  "上传文件示例"
 | 
			
		||||
// @Success   200   {object}  response.Response{data=exampleRes.ExaFileResponse,msg=string}  "上传文件示例,返回包括文件详情"
 | 
			
		||||
// @Router    /fileUploadAndDownload/upload [post]
 | 
			
		||||
func (b *FileUploadAndDownloadApi) UploadFile(c *gin.Context) {
 | 
			
		||||
	var file example.ExaFileUploadAndDownload
 | 
			
		||||
	noSave := c.DefaultQuery("noSave", "0")
 | 
			
		||||
	_, header, err := c.Request.FormFile("file")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("接收文件失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("接收文件失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	file, err = fileUploadAndDownloadService.UploadFile(header, noSave) // 文件上传后拿到文件路径
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("修改数据库链接失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("修改数据库链接失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithDetailed(exampleRes.ExaFileResponse{File: file}, "上传成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// EditFileName 编辑文件名或者备注
 | 
			
		||||
func (b *FileUploadAndDownloadApi) EditFileName(c *gin.Context) {
 | 
			
		||||
	var file example.ExaFileUploadAndDownload
 | 
			
		||||
	err := c.ShouldBindJSON(&file)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = fileUploadAndDownloadService.EditFileName(file)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("编辑失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("编辑失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithMessage("编辑成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// DeleteFile
 | 
			
		||||
// @Tags      ExaFileUploadAndDownload
 | 
			
		||||
// @Summary   删除文件
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      example.ExaFileUploadAndDownload  true  "传入文件里面id即可"
 | 
			
		||||
// @Success   200   {object}  response.Response{msg=string}     "删除文件"
 | 
			
		||||
// @Router    /fileUploadAndDownload/deleteFile [post]
 | 
			
		||||
func (b *FileUploadAndDownloadApi) DeleteFile(c *gin.Context) {
 | 
			
		||||
	var file example.ExaFileUploadAndDownload
 | 
			
		||||
	err := c.ShouldBindJSON(&file)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	if err := fileUploadAndDownloadService.DeleteFile(file); err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("删除失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("删除失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithMessage("删除成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetFileList
 | 
			
		||||
// @Tags      ExaFileUploadAndDownload
 | 
			
		||||
// @Summary   分页文件列表
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      request.PageInfo                                        true  "页码, 每页大小"
 | 
			
		||||
// @Success   200   {object}  response.Response{data=response.PageResult,msg=string}  "分页文件列表,返回包括列表,总数,页码,每页数量"
 | 
			
		||||
// @Router    /fileUploadAndDownload/getFileList [post]
 | 
			
		||||
func (b *FileUploadAndDownloadApi) GetFileList(c *gin.Context) {
 | 
			
		||||
	var pageInfo request.PageInfo
 | 
			
		||||
	err := c.ShouldBindJSON(&pageInfo)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	list, total, err := fileUploadAndDownloadService.GetFileRecordInfoList(pageInfo)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("获取失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("获取失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithDetailed(response.PageResult{
 | 
			
		||||
		List:     list,
 | 
			
		||||
		Total:    total,
 | 
			
		||||
		Page:     pageInfo.Page,
 | 
			
		||||
		PageSize: pageInfo.PageSize,
 | 
			
		||||
	}, "获取成功", c)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										106
									
								
								api/v1/system/article.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								api/v1/system/article.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,106 @@
 | 
			
		||||
package system
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/gin-gonic/gin"
 | 
			
		||||
	"miniapp/global"
 | 
			
		||||
	"miniapp/model/common"
 | 
			
		||||
	"miniapp/model/common/request"
 | 
			
		||||
	r "miniapp/model/common/response"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type ArticleApi struct{}
 | 
			
		||||
 | 
			
		||||
// GetArticleList 获取文章列表
 | 
			
		||||
func (a ArticleApi) GetArticleList(ctx *gin.Context) {
 | 
			
		||||
	var p request.PageInfo
 | 
			
		||||
	if err := ctx.ShouldBind(&p); err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("参数错误" + err.Error())
 | 
			
		||||
		r.FailWithMessage("参数错误"+err.Error(), ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	list, total, err := articleService.GetArticleList(p)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("获取文章列表失败" + err.Error())
 | 
			
		||||
		r.FailWithMessage("获取文章列表失败", ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	r.OkWithDetailed(r.PageResult{List: list, Total: total, Page: p.Page, PageSize: p.PageSize}, "获取成功", ctx)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CreateArticle 创建文章
 | 
			
		||||
func (a ArticleApi) CreateArticle(ctx *gin.Context) {
 | 
			
		||||
	var article common.Article
 | 
			
		||||
	if err := ctx.ShouldBindJSON(&article); err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("参数错误" + err.Error())
 | 
			
		||||
		r.FailWithMessage("参数错误"+err.Error(), ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err := articleService.CreateArticle(&article)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("创建失败" + err.Error())
 | 
			
		||||
		r.FailWithMessage("创建失败"+err.Error(), ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	r.OkWithMessage("创建成功", ctx)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UpdateArticle 更新文章
 | 
			
		||||
func (a ArticleApi) UpdateArticle(ctx *gin.Context) {
 | 
			
		||||
	var article common.Article
 | 
			
		||||
	if err := ctx.ShouldBindJSON(&article); err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("参数错误" + err.Error())
 | 
			
		||||
		r.FailWithMessage("参数错误"+err.Error(), ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err := articleService.UpdateArticle(&article)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("更新失败" + err.Error())
 | 
			
		||||
		r.FailWithMessage("更新失败"+err.Error(), ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	r.OkWithMessage("更新成功", ctx)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// DeleteArticle 删除文章
 | 
			
		||||
func (a ArticleApi) DeleteArticle(ctx *gin.Context) {
 | 
			
		||||
	var article common.Article
 | 
			
		||||
	if err := ctx.ShouldBind(&article); err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("参数错误" + err.Error())
 | 
			
		||||
		r.FailWithMessage("参数错误"+err.Error(), ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err := articleService.DeleteArticle(&article)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("删除失败" + err.Error())
 | 
			
		||||
		r.FailWithMessage("删除失败"+err.Error(), ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	r.OkWithMessage("删除成功", ctx)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetArticleById 根据id获取文章
 | 
			
		||||
func (a ArticleApi) GetArticleById(ctx *gin.Context) {
 | 
			
		||||
	Id := ctx.Param("id")
 | 
			
		||||
	if Id == "" {
 | 
			
		||||
		global.GVA_LOG.Error("参数错误")
 | 
			
		||||
		r.FailWithMessage("参数错误", ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	article, err := articleService.GetArticleById(Id)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("获取失败" + err.Error())
 | 
			
		||||
		r.FailWithMessage("获取失败"+err.Error(), ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	r.OkWithDetailed(article, "获取成功", ctx)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										108
									
								
								api/v1/system/banner.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										108
									
								
								api/v1/system/banner.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,108 @@
 | 
			
		||||
package system
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/gin-gonic/gin"
 | 
			
		||||
	"miniapp/global"
 | 
			
		||||
	"miniapp/model/common"
 | 
			
		||||
	"miniapp/model/common/request"
 | 
			
		||||
	r "miniapp/model/common/response"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type BannerApi struct {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetBannerList 获取轮播图列表
 | 
			
		||||
func (b *BannerApi) GetBannerList(ctx *gin.Context) {
 | 
			
		||||
	var p request.PageInfo
 | 
			
		||||
 | 
			
		||||
	if err := ctx.ShouldBind(&p); err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("参数错误" + err.Error())
 | 
			
		||||
		r.FailWithMessage("参数错误"+err.Error(), ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	list, total, err := bannerService.GetBannerList(p)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("获取轮播图列表失败" + err.Error())
 | 
			
		||||
		r.FailWithMessage("获取轮播图列表失败", ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	r.OkWithDetailed(r.PageResult{List: list, Total: total, Page: p.Page, PageSize: p.PageSize}, "获取成功", ctx)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CreateBanner 创建轮播图
 | 
			
		||||
func (b *BannerApi) CreateBanner(ctx *gin.Context) {
 | 
			
		||||
	var banner common.Banner
 | 
			
		||||
	if err := ctx.ShouldBindJSON(&banner); err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("参数错误" + err.Error())
 | 
			
		||||
		r.FailWithMessage("参数错误"+err.Error(), ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err := bannerService.CreateBanner(&banner)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("创建失败" + err.Error())
 | 
			
		||||
		r.FailWithMessage("创建失败"+err.Error(), ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	r.OkWithMessage("创建成功", ctx)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UpdateBanner 更新轮播图
 | 
			
		||||
func (b *BannerApi) UpdateBanner(ctx *gin.Context) {
 | 
			
		||||
	var banner common.Banner
 | 
			
		||||
	if err := ctx.ShouldBindJSON(&banner); err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("参数错误" + err.Error())
 | 
			
		||||
		r.FailWithMessage("参数错误"+err.Error(), ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err := bannerService.UpdateBanner(&banner)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("更新失败" + err.Error())
 | 
			
		||||
		r.FailWithMessage("更新失败"+err.Error(), ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	r.OkWithMessage("更新成功", ctx)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// DeleteBanner 删除轮播图
 | 
			
		||||
func (b *BannerApi) DeleteBanner(ctx *gin.Context) {
 | 
			
		||||
	var banner common.Banner
 | 
			
		||||
	if err := ctx.ShouldBind(&banner); err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("参数错误" + err.Error())
 | 
			
		||||
		r.FailWithMessage("参数错误"+err.Error(), ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err := bannerService.DeleteBanner(&banner)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("删除失败" + err.Error())
 | 
			
		||||
		r.FailWithMessage("删除失败"+err.Error(), ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	r.OkWithMessage("删除成功", ctx)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetBannerById 根据id获取轮播图
 | 
			
		||||
func (b *BannerApi) GetBannerById(ctx *gin.Context) {
 | 
			
		||||
	Id := ctx.Param("id")
 | 
			
		||||
	if Id == "" {
 | 
			
		||||
		global.GVA_LOG.Error("参数错误")
 | 
			
		||||
		r.FailWithMessage("参数错误", ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	banner, err := bannerService.GetBannerById(Id)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("获取失败" + err.Error())
 | 
			
		||||
		r.FailWithMessage("获取失败"+err.Error(), ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	r.OkWithDetailed(banner, "获取成功", ctx)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										46
									
								
								api/v1/system/enter.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								api/v1/system/enter.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,46 @@
 | 
			
		||||
package system
 | 
			
		||||
 | 
			
		||||
import "miniapp/service"
 | 
			
		||||
 | 
			
		||||
type ApiGroup struct {
 | 
			
		||||
	DBApi
 | 
			
		||||
	JwtApi
 | 
			
		||||
	BaseApi
 | 
			
		||||
	SystemApi
 | 
			
		||||
	CasbinApi
 | 
			
		||||
	AutoCodeApi
 | 
			
		||||
	SystemApiApi
 | 
			
		||||
	AuthorityApi
 | 
			
		||||
	DictionaryApi
 | 
			
		||||
	AuthorityMenuApi
 | 
			
		||||
	OperationRecordApi
 | 
			
		||||
	AutoCodeHistoryApi
 | 
			
		||||
	DictionaryDetailApi
 | 
			
		||||
	AuthorityBtnApi
 | 
			
		||||
	ChatGptApi
 | 
			
		||||
	BannerApi
 | 
			
		||||
	HospitalApi
 | 
			
		||||
	ArticleApi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	apiService              = service.ServiceGroupApp.SystemServiceGroup.ApiService
 | 
			
		||||
	jwtService              = service.ServiceGroupApp.SystemServiceGroup.JwtService
 | 
			
		||||
	menuService             = service.ServiceGroupApp.SystemServiceGroup.MenuService
 | 
			
		||||
	userService             = service.ServiceGroupApp.SystemServiceGroup.UserService
 | 
			
		||||
	initDBService           = service.ServiceGroupApp.SystemServiceGroup.InitDBService
 | 
			
		||||
	casbinService           = service.ServiceGroupApp.SystemServiceGroup.CasbinService
 | 
			
		||||
	autoCodeService         = service.ServiceGroupApp.SystemServiceGroup.AutoCodeService
 | 
			
		||||
	baseMenuService         = service.ServiceGroupApp.SystemServiceGroup.BaseMenuService
 | 
			
		||||
	authorityService        = service.ServiceGroupApp.SystemServiceGroup.AuthorityService
 | 
			
		||||
	dictionaryService       = service.ServiceGroupApp.SystemServiceGroup.DictionaryService
 | 
			
		||||
	systemConfigService     = service.ServiceGroupApp.SystemServiceGroup.SystemConfigService
 | 
			
		||||
	operationRecordService  = service.ServiceGroupApp.SystemServiceGroup.OperationRecordService
 | 
			
		||||
	autoCodeHistoryService  = service.ServiceGroupApp.SystemServiceGroup.AutoCodeHistoryService
 | 
			
		||||
	dictionaryDetailService = service.ServiceGroupApp.SystemServiceGroup.DictionaryDetailService
 | 
			
		||||
	authorityBtnService     = service.ServiceGroupApp.SystemServiceGroup.AuthorityBtnService
 | 
			
		||||
	chatGptService          = service.ServiceGroupApp.SystemServiceGroup.ChatGptService
 | 
			
		||||
	hospitalService         = service.ServiceGroupApp.SystemServiceGroup.HospitalService
 | 
			
		||||
	bannerService           = service.ServiceGroupApp.SystemServiceGroup.BannerService
 | 
			
		||||
	articleService          = service.ServiceGroupApp.SystemServiceGroup.ArticleService
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										100
									
								
								api/v1/system/hospital.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								api/v1/system/hospital.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,100 @@
 | 
			
		||||
package system
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/gin-gonic/gin"
 | 
			
		||||
	"miniapp/model/common"
 | 
			
		||||
	"miniapp/model/common/request"
 | 
			
		||||
	r "miniapp/model/common/response"
 | 
			
		||||
	systemService "miniapp/service/system"
 | 
			
		||||
	"strconv"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type HospitalApi struct {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetHospitalList 获取医院列表
 | 
			
		||||
func (h HospitalApi) GetHospitalList(ctx *gin.Context) {
 | 
			
		||||
	var p request.PageInfo
 | 
			
		||||
	if err := ctx.ShouldBind(&p); err != nil {
 | 
			
		||||
		r.FailWithMessage("参数错误"+err.Error(), ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	list, total, err := systemService.HospitalService{}.GetHospitalList(p)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		r.FailWithMessage("获取医院列表失败", ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	r.OkWithDetailed(r.PageResult{List: list, Total: total, Page: p.Page, PageSize: p.PageSize}, "获取成功", ctx)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CreateHospital 创建医院
 | 
			
		||||
func (h HospitalApi) CreateHospital(ctx *gin.Context) {
 | 
			
		||||
	var hospital common.Hospital
 | 
			
		||||
	if err := ctx.ShouldBindJSON(&hospital); err != nil {
 | 
			
		||||
		r.FailWithMessage("参数错误"+err.Error(), ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err := systemService.HospitalService{}.CreateHospital(&hospital)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		r.FailWithMessage("创建失败"+err.Error(), ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	r.OkWithMessage("创建成功", ctx)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UpdateHospital 更新医院
 | 
			
		||||
func (h HospitalApi) UpdateHospital(ctx *gin.Context) {
 | 
			
		||||
	var hospital common.Hospital
 | 
			
		||||
	if err := ctx.ShouldBindJSON(&hospital); err != nil {
 | 
			
		||||
		r.FailWithMessage("参数错误"+err.Error(), ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err := systemService.HospitalService{}.UpdateHospital(&hospital)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		r.FailWithMessage("更新失败"+err.Error(), ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	r.OkWithMessage("更新成功", ctx)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// DeleteHospital 删除医院
 | 
			
		||||
func (h HospitalApi) DeleteHospital(ctx *gin.Context) {
 | 
			
		||||
	var hospital common.Hospital
 | 
			
		||||
	if err := ctx.ShouldBind(&hospital); err != nil {
 | 
			
		||||
		r.FailWithMessage("参数错误"+err.Error(), ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err := hospitalService.DeleteHospital(&hospital)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		r.FailWithMessage("删除失败"+err.Error(), ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	r.OkWithMessage("删除成功", ctx)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetHospitalById 根据id获取医院
 | 
			
		||||
func (h HospitalApi) GetHospitalById(ctx *gin.Context) {
 | 
			
		||||
	Id := ctx.Param("id")
 | 
			
		||||
	if Id == "" {
 | 
			
		||||
		r.FailWithMessage("参数错误", ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 参数转换 string -> int
 | 
			
		||||
	id, _ := strconv.Atoi(Id)
 | 
			
		||||
	hospitalResult, err := systemService.HospitalService{}.GetHospitalById(uint(id))
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		r.FailWithMessage("获取失败"+err.Error(), ctx)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	r.OkWithDetailed(hospitalResult, "获取成功", ctx)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										231
									
								
								api/v1/system/sys_api.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										231
									
								
								api/v1/system/sys_api.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,231 @@
 | 
			
		||||
package system
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"miniapp/global"
 | 
			
		||||
	"miniapp/model/common/request"
 | 
			
		||||
	"miniapp/model/common/response"
 | 
			
		||||
	"miniapp/model/system"
 | 
			
		||||
	systemReq "miniapp/model/system/request"
 | 
			
		||||
	systemRes "miniapp/model/system/response"
 | 
			
		||||
	"miniapp/utils"
 | 
			
		||||
 | 
			
		||||
	"github.com/gin-gonic/gin"
 | 
			
		||||
	"go.uber.org/zap"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type SystemApiApi struct{}
 | 
			
		||||
 | 
			
		||||
// CreateApi
 | 
			
		||||
// @Tags      SysApi
 | 
			
		||||
// @Summary   创建基础api
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      system.SysApi                  true  "api路径, api中文描述, api组, 方法"
 | 
			
		||||
// @Success   200   {object}  response.Response{msg=string}  "创建基础api"
 | 
			
		||||
// @Router    /api/createApi [post]
 | 
			
		||||
func (s *SystemApiApi) CreateApi(c *gin.Context) {
 | 
			
		||||
	var api system.SysApi
 | 
			
		||||
	err := c.ShouldBindJSON(&api)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = utils.Verify(api, utils.ApiVerify)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = apiService.CreateApi(api)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("创建失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("创建失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithMessage("创建成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// DeleteApi
 | 
			
		||||
// @Tags      SysApi
 | 
			
		||||
// @Summary   删除api
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      system.SysApi                  true  "ID"
 | 
			
		||||
// @Success   200   {object}  response.Response{msg=string}  "删除api"
 | 
			
		||||
// @Router    /api/deleteApi [post]
 | 
			
		||||
func (s *SystemApiApi) DeleteApi(c *gin.Context) {
 | 
			
		||||
	var api system.SysApi
 | 
			
		||||
	err := c.ShouldBindJSON(&api)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = utils.Verify(api.GVA_MODEL, utils.IdVerify)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = apiService.DeleteApi(api)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("删除失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("删除失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithMessage("删除成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetApiList
 | 
			
		||||
// @Tags      SysApi
 | 
			
		||||
// @Summary   分页获取API列表
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      systemReq.SearchApiParams                               true  "分页获取API列表"
 | 
			
		||||
// @Success   200   {object}  response.Response{data=response.PageResult,msg=string}  "分页获取API列表,返回包括列表,总数,页码,每页数量"
 | 
			
		||||
// @Router    /api/getApiList [post]
 | 
			
		||||
func (s *SystemApiApi) GetApiList(c *gin.Context) {
 | 
			
		||||
	var pageInfo systemReq.SearchApiParams
 | 
			
		||||
	err := c.ShouldBindJSON(&pageInfo)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = utils.Verify(pageInfo.PageInfo, utils.PageInfoVerify)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	list, total, err := apiService.GetAPIInfoList(pageInfo.SysApi, pageInfo.PageInfo, pageInfo.OrderKey, pageInfo.Desc)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("获取失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("获取失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithDetailed(response.PageResult{
 | 
			
		||||
		List:     list,
 | 
			
		||||
		Total:    total,
 | 
			
		||||
		Page:     pageInfo.Page,
 | 
			
		||||
		PageSize: pageInfo.PageSize,
 | 
			
		||||
	}, "获取成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetApiById
 | 
			
		||||
// @Tags      SysApi
 | 
			
		||||
// @Summary   根据id获取api
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      request.GetById                                   true  "根据id获取api"
 | 
			
		||||
// @Success   200   {object}  response.Response{data=systemRes.SysAPIResponse}  "根据id获取api,返回包括api详情"
 | 
			
		||||
// @Router    /api/getApiById [post]
 | 
			
		||||
func (s *SystemApiApi) GetApiById(c *gin.Context) {
 | 
			
		||||
	var idInfo request.GetById
 | 
			
		||||
	err := c.ShouldBindJSON(&idInfo)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = utils.Verify(idInfo, utils.IdVerify)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	api, err := apiService.GetApiById(idInfo.ID)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("获取失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("获取失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithDetailed(systemRes.SysAPIResponse{Api: api}, "获取成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UpdateApi
 | 
			
		||||
// @Tags      SysApi
 | 
			
		||||
// @Summary   修改基础api
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      system.SysApi                  true  "api路径, api中文描述, api组, 方法"
 | 
			
		||||
// @Success   200   {object}  response.Response{msg=string}  "修改基础api"
 | 
			
		||||
// @Router    /api/updateApi [post]
 | 
			
		||||
func (s *SystemApiApi) UpdateApi(c *gin.Context) {
 | 
			
		||||
	var api system.SysApi
 | 
			
		||||
	err := c.ShouldBindJSON(&api)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = utils.Verify(api, utils.ApiVerify)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = apiService.UpdateApi(api)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("修改失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("修改失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithMessage("修改成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetAllApis
 | 
			
		||||
// @Tags      SysApi
 | 
			
		||||
// @Summary   获取所有的Api 不分页
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Success   200  {object}  response.Response{data=systemRes.SysAPIListResponse,msg=string}  "获取所有的Api 不分页,返回包括api列表"
 | 
			
		||||
// @Router    /api/getAllApis [post]
 | 
			
		||||
func (s *SystemApiApi) GetAllApis(c *gin.Context) {
 | 
			
		||||
	apis, err := apiService.GetAllApis()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("获取失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("获取失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithDetailed(systemRes.SysAPIListResponse{Apis: apis}, "获取成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// DeleteApisByIds
 | 
			
		||||
// @Tags      SysApi
 | 
			
		||||
// @Summary   删除选中Api
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      request.IdsReq                 true  "ID"
 | 
			
		||||
// @Success   200   {object}  response.Response{msg=string}  "删除选中Api"
 | 
			
		||||
// @Router    /api/deleteApisByIds [delete]
 | 
			
		||||
func (s *SystemApiApi) DeleteApisByIds(c *gin.Context) {
 | 
			
		||||
	var ids request.IdsReq
 | 
			
		||||
	err := c.ShouldBindJSON(&ids)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = apiService.DeleteApisByIds(ids)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("删除失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("删除失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithMessage("删除成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// FreshCasbin
 | 
			
		||||
// @Tags      SysApi
 | 
			
		||||
// @Summary   刷新casbin缓存
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Success   200   {object}  response.Response{msg=string}  "刷新成功"
 | 
			
		||||
// @Router    /api/freshCasbin [get]
 | 
			
		||||
func (s *SystemApiApi) FreshCasbin(c *gin.Context) {
 | 
			
		||||
	err := apiService.FreshCasbin()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("刷新失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("刷新失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithMessage("刷新成功", c)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										208
									
								
								api/v1/system/sys_authority.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										208
									
								
								api/v1/system/sys_authority.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,208 @@
 | 
			
		||||
package system
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"miniapp/global"
 | 
			
		||||
	"miniapp/model/common/request"
 | 
			
		||||
	"miniapp/model/common/response"
 | 
			
		||||
	"miniapp/model/system"
 | 
			
		||||
	systemReq "miniapp/model/system/request"
 | 
			
		||||
	systemRes "miniapp/model/system/response"
 | 
			
		||||
	"miniapp/utils"
 | 
			
		||||
 | 
			
		||||
	"github.com/gin-gonic/gin"
 | 
			
		||||
	"go.uber.org/zap"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type AuthorityApi struct{}
 | 
			
		||||
 | 
			
		||||
// CreateAuthority
 | 
			
		||||
// @Tags      Authority
 | 
			
		||||
// @Summary   创建角色
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      system.SysAuthority                                                true  "权限id, 权限名, 父角色id"
 | 
			
		||||
// @Success   200   {object}  response.Response{data=systemRes.SysAuthorityResponse,msg=string}  "创建角色,返回包括系统角色详情"
 | 
			
		||||
// @Router    /authority/createAuthority [post]
 | 
			
		||||
func (a *AuthorityApi) CreateAuthority(c *gin.Context) {
 | 
			
		||||
	var authority system.SysAuthority
 | 
			
		||||
	err := c.ShouldBindJSON(&authority)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err = utils.Verify(authority, utils.AuthorityVerify)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	if authBack, err := authorityService.CreateAuthority(authority); err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("创建失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("创建失败"+err.Error(), c)
 | 
			
		||||
	} else {
 | 
			
		||||
		_ = menuService.AddMenuAuthority(systemReq.DefaultMenu(), authority.AuthorityId)
 | 
			
		||||
		_ = casbinService.UpdateCasbin(authority.AuthorityId, systemReq.DefaultCasbin())
 | 
			
		||||
		response.OkWithDetailed(systemRes.SysAuthorityResponse{Authority: authBack}, "创建成功", c)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CopyAuthority
 | 
			
		||||
// @Tags      Authority
 | 
			
		||||
// @Summary   拷贝角色
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      response.SysAuthorityCopyResponse                                  true  "旧角色id, 新权限id, 新权限名, 新父角色id"
 | 
			
		||||
// @Success   200   {object}  response.Response{data=systemRes.SysAuthorityResponse,msg=string}  "拷贝角色,返回包括系统角色详情"
 | 
			
		||||
// @Router    /authority/copyAuthority [post]
 | 
			
		||||
func (a *AuthorityApi) CopyAuthority(c *gin.Context) {
 | 
			
		||||
	var copyInfo systemRes.SysAuthorityCopyResponse
 | 
			
		||||
	err := c.ShouldBindJSON(©Info)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = utils.Verify(copyInfo, utils.OldAuthorityVerify)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = utils.Verify(copyInfo.Authority, utils.AuthorityVerify)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	authBack, err := authorityService.CopyAuthority(copyInfo)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("拷贝失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("拷贝失败"+err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithDetailed(systemRes.SysAuthorityResponse{Authority: authBack}, "拷贝成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// DeleteAuthority
 | 
			
		||||
// @Tags      Authority
 | 
			
		||||
// @Summary   删除角色
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      system.SysAuthority            true  "删除角色"
 | 
			
		||||
// @Success   200   {object}  response.Response{msg=string}  "删除角色"
 | 
			
		||||
// @Router    /authority/deleteAuthority [post]
 | 
			
		||||
func (a *AuthorityApi) DeleteAuthority(c *gin.Context) {
 | 
			
		||||
	var authority system.SysAuthority
 | 
			
		||||
	err := c.ShouldBindJSON(&authority)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = utils.Verify(authority, utils.AuthorityIdVerify)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = authorityService.DeleteAuthority(&authority)
 | 
			
		||||
	if err != nil { // 删除角色之前需要判断是否有用户正在使用此角色
 | 
			
		||||
		global.GVA_LOG.Error("删除失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("删除失败"+err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithMessage("删除成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UpdateAuthority
 | 
			
		||||
// @Tags      Authority
 | 
			
		||||
// @Summary   更新角色信息
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      system.SysAuthority                                                true  "权限id, 权限名, 父角色id"
 | 
			
		||||
// @Success   200   {object}  response.Response{data=systemRes.SysAuthorityResponse,msg=string}  "更新角色信息,返回包括系统角色详情"
 | 
			
		||||
// @Router    /authority/updateAuthority [post]
 | 
			
		||||
func (a *AuthorityApi) UpdateAuthority(c *gin.Context) {
 | 
			
		||||
	var auth system.SysAuthority
 | 
			
		||||
	err := c.ShouldBindJSON(&auth)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = utils.Verify(auth, utils.AuthorityVerify)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	authority, err := authorityService.UpdateAuthority(auth)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("更新失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("更新失败"+err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithDetailed(systemRes.SysAuthorityResponse{Authority: authority}, "更新成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetAuthorityList
 | 
			
		||||
// @Tags      Authority
 | 
			
		||||
// @Summary   分页获取角色列表
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      request.PageInfo                                        true  "页码, 每页大小"
 | 
			
		||||
// @Success   200   {object}  response.Response{data=response.PageResult,msg=string}  "分页获取角色列表,返回包括列表,总数,页码,每页数量"
 | 
			
		||||
// @Router    /authority/getAuthorityList [post]
 | 
			
		||||
func (a *AuthorityApi) GetAuthorityList(c *gin.Context) {
 | 
			
		||||
	var pageInfo request.PageInfo
 | 
			
		||||
	err := c.ShouldBindJSON(&pageInfo)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = utils.Verify(pageInfo, utils.PageInfoVerify)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	list, total, err := authorityService.GetAuthorityInfoList(pageInfo)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("获取失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("获取失败"+err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithDetailed(response.PageResult{
 | 
			
		||||
		List:     list,
 | 
			
		||||
		Total:    total,
 | 
			
		||||
		Page:     pageInfo.Page,
 | 
			
		||||
		PageSize: pageInfo.PageSize,
 | 
			
		||||
	}, "获取成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// SetDataAuthority
 | 
			
		||||
// @Tags      Authority
 | 
			
		||||
// @Summary   设置角色资源权限
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      system.SysAuthority            true  "设置角色资源权限"
 | 
			
		||||
// @Success   200   {object}  response.Response{msg=string}  "设置角色资源权限"
 | 
			
		||||
// @Router    /authority/setDataAuthority [post]
 | 
			
		||||
func (a *AuthorityApi) SetDataAuthority(c *gin.Context) {
 | 
			
		||||
	var auth system.SysAuthority
 | 
			
		||||
	err := c.ShouldBindJSON(&auth)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = utils.Verify(auth, utils.AuthorityIdVerify)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = authorityService.SetDataAuthority(auth)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("设置失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("设置失败"+err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithMessage("设置成功", c)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										80
									
								
								api/v1/system/sys_authority_btn.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								api/v1/system/sys_authority_btn.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,80 @@
 | 
			
		||||
package system
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/gin-gonic/gin"
 | 
			
		||||
	"go.uber.org/zap"
 | 
			
		||||
	"miniapp/global"
 | 
			
		||||
	"miniapp/model/common/response"
 | 
			
		||||
	"miniapp/model/system/request"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type AuthorityBtnApi struct{}
 | 
			
		||||
 | 
			
		||||
// GetAuthorityBtn
 | 
			
		||||
// @Tags      AuthorityBtn
 | 
			
		||||
// @Summary   获取权限按钮
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      request.SysAuthorityBtnReq                                      true  "菜单id, 角色id, 选中的按钮id"
 | 
			
		||||
// @Success   200   {object}  response.Response{data=response.SysAuthorityBtnRes,msg=string}  "返回列表成功"
 | 
			
		||||
// @Router    /authorityBtn/getAuthorityBtn [post]
 | 
			
		||||
func (a *AuthorityBtnApi) GetAuthorityBtn(c *gin.Context) {
 | 
			
		||||
	var req request.SysAuthorityBtnReq
 | 
			
		||||
	err := c.ShouldBindJSON(&req)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	res, err := authorityBtnService.GetAuthorityBtn(req)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("查询失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("查询失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithDetailed(res, "查询成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// SetAuthorityBtn
 | 
			
		||||
// @Tags      AuthorityBtn
 | 
			
		||||
// @Summary   设置权限按钮
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      request.SysAuthorityBtnReq     true  "菜单id, 角色id, 选中的按钮id"
 | 
			
		||||
// @Success   200   {object}  response.Response{msg=string}  "返回列表成功"
 | 
			
		||||
// @Router    /authorityBtn/setAuthorityBtn [post]
 | 
			
		||||
func (a *AuthorityBtnApi) SetAuthorityBtn(c *gin.Context) {
 | 
			
		||||
	var req request.SysAuthorityBtnReq
 | 
			
		||||
	err := c.ShouldBindJSON(&req)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = authorityBtnService.SetAuthorityBtn(req)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("分配失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("分配失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithMessage("分配成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CanRemoveAuthorityBtn
 | 
			
		||||
// @Tags      AuthorityBtn
 | 
			
		||||
// @Summary   设置权限按钮
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Success   200  {object}  response.Response{msg=string}  "删除成功"
 | 
			
		||||
// @Router    /authorityBtn/canRemoveAuthorityBtn [post]
 | 
			
		||||
func (a *AuthorityBtnApi) CanRemoveAuthorityBtn(c *gin.Context) {
 | 
			
		||||
	id := c.Query("id")
 | 
			
		||||
	err := authorityBtnService.CanRemoveAuthorityBtn(id)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("删除失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithMessage("删除成功", c)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										315
									
								
								api/v1/system/sys_auto_code.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										315
									
								
								api/v1/system/sys_auto_code.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,315 @@
 | 
			
		||||
package system
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"errors"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"net/url"
 | 
			
		||||
	"os"
 | 
			
		||||
	"strings"
 | 
			
		||||
 | 
			
		||||
	"miniapp/global"
 | 
			
		||||
	"miniapp/model/common/response"
 | 
			
		||||
	"miniapp/model/system"
 | 
			
		||||
	"miniapp/utils"
 | 
			
		||||
 | 
			
		||||
	"github.com/gin-gonic/gin"
 | 
			
		||||
	"go.uber.org/zap"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type AutoCodeApi struct{}
 | 
			
		||||
 | 
			
		||||
// PreviewTemp
 | 
			
		||||
// @Tags      AutoCode
 | 
			
		||||
// @Summary   预览创建后的代码
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      system.AutoCodeStruct                                      true  "预览创建代码"
 | 
			
		||||
// @Success   200   {object}  response.Response{data=map[string]interface{},msg=string}  "预览创建后的代码"
 | 
			
		||||
// @Router    /autoCode/preview [post]
 | 
			
		||||
func (autoApi *AutoCodeApi) PreviewTemp(c *gin.Context) {
 | 
			
		||||
	var a system.AutoCodeStruct
 | 
			
		||||
	_ = c.ShouldBindJSON(&a)
 | 
			
		||||
	if err := utils.Verify(a, utils.AutoCodeVerify); err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	a.Pretreatment() // 处理go关键字
 | 
			
		||||
	a.PackageT = utils.FirstUpper(a.Package)
 | 
			
		||||
	autoCode, err := autoCodeService.PreviewTemp(a)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("预览失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("预览失败", c)
 | 
			
		||||
	} else {
 | 
			
		||||
		response.OkWithDetailed(gin.H{"autoCode": autoCode}, "预览成功", c)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CreateTemp
 | 
			
		||||
// @Tags      AutoCode
 | 
			
		||||
// @Summary   自动代码模板
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      system.AutoCodeStruct  true  "创建自动代码"
 | 
			
		||||
// @Success   200   {string}  string                 "{"success":true,"data":{},"msg":"创建成功"}"
 | 
			
		||||
// @Router    /autoCode/createTemp [post]
 | 
			
		||||
func (autoApi *AutoCodeApi) CreateTemp(c *gin.Context) {
 | 
			
		||||
	var a system.AutoCodeStruct
 | 
			
		||||
	_ = c.ShouldBindJSON(&a)
 | 
			
		||||
	if err := utils.Verify(a, utils.AutoCodeVerify); err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	a.Pretreatment()
 | 
			
		||||
	var apiIds []uint
 | 
			
		||||
	if a.AutoCreateApiToSql {
 | 
			
		||||
		if ids, err := autoCodeService.AutoCreateApi(&a); err != nil {
 | 
			
		||||
			global.GVA_LOG.Error("自动化创建失败!请自行清空垃圾数据!", zap.Error(err))
 | 
			
		||||
			c.Writer.Header().Add("success", "false")
 | 
			
		||||
			c.Writer.Header().Add("msg", url.QueryEscape("自动化创建失败!请自行清空垃圾数据!"))
 | 
			
		||||
			return
 | 
			
		||||
		} else {
 | 
			
		||||
			apiIds = ids
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	a.PackageT = utils.FirstUpper(a.Package)
 | 
			
		||||
	err := autoCodeService.CreateTemp(a, apiIds...)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		if errors.Is(err, system.ErrAutoMove) {
 | 
			
		||||
			c.Writer.Header().Add("success", "true")
 | 
			
		||||
			c.Writer.Header().Add("msg", url.QueryEscape(err.Error()))
 | 
			
		||||
		} else {
 | 
			
		||||
			c.Writer.Header().Add("success", "false")
 | 
			
		||||
			c.Writer.Header().Add("msg", url.QueryEscape(err.Error()))
 | 
			
		||||
			_ = os.Remove("./ginvueadmin.zip")
 | 
			
		||||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
		c.Writer.Header().Add("Content-Disposition", fmt.Sprintf("attachment; filename=%s", "ginvueadmin.zip")) // fmt.Sprintf("attachment; filename=%s", filename)对下载的文件重命名
 | 
			
		||||
		c.Writer.Header().Add("Content-Type", "application/json")
 | 
			
		||||
		c.Writer.Header().Add("success", "true")
 | 
			
		||||
		c.File("./ginvueadmin.zip")
 | 
			
		||||
		_ = os.Remove("./ginvueadmin.zip")
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetDB
 | 
			
		||||
// @Tags      AutoCode
 | 
			
		||||
// @Summary   获取当前所有数据库
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Success   200  {object}  response.Response{data=map[string]interface{},msg=string}  "获取当前所有数据库"
 | 
			
		||||
// @Router    /autoCode/getDatabase [get]
 | 
			
		||||
func (autoApi *AutoCodeApi) GetDB(c *gin.Context) {
 | 
			
		||||
	businessDB := c.Query("businessDB")
 | 
			
		||||
	dbs, err := autoCodeService.Database(businessDB).GetDB(businessDB)
 | 
			
		||||
	var dbList []map[string]interface{}
 | 
			
		||||
	for _, db := range global.GVA_CONFIG.DBList {
 | 
			
		||||
		var item = make(map[string]interface{})
 | 
			
		||||
		item["aliasName"] = db.AliasName
 | 
			
		||||
		item["dbName"] = db.Dbname
 | 
			
		||||
		item["disable"] = db.Disable
 | 
			
		||||
		item["dbtype"] = db.Type
 | 
			
		||||
		dbList = append(dbList, item)
 | 
			
		||||
	}
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("获取失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("获取失败", c)
 | 
			
		||||
	} else {
 | 
			
		||||
		response.OkWithDetailed(gin.H{"dbs": dbs, "dbList": dbList}, "获取成功", c)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetTables
 | 
			
		||||
// @Tags      AutoCode
 | 
			
		||||
// @Summary   获取当前数据库所有表
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Success   200  {object}  response.Response{data=map[string]interface{},msg=string}  "获取当前数据库所有表"
 | 
			
		||||
// @Router    /autoCode/getTables [get]
 | 
			
		||||
func (autoApi *AutoCodeApi) GetTables(c *gin.Context) {
 | 
			
		||||
	dbName := c.DefaultQuery("dbName", global.GVA_CONFIG.Mysql.Dbname)
 | 
			
		||||
	businessDB := c.Query("businessDB")
 | 
			
		||||
	tables, err := autoCodeService.Database(businessDB).GetTables(businessDB, dbName)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("查询table失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("查询table失败", c)
 | 
			
		||||
	} else {
 | 
			
		||||
		response.OkWithDetailed(gin.H{"tables": tables}, "获取成功", c)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetColumn
 | 
			
		||||
// @Tags      AutoCode
 | 
			
		||||
// @Summary   获取当前表所有字段
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Success   200  {object}  response.Response{data=map[string]interface{},msg=string}  "获取当前表所有字段"
 | 
			
		||||
// @Router    /autoCode/getColumn [get]
 | 
			
		||||
func (autoApi *AutoCodeApi) GetColumn(c *gin.Context) {
 | 
			
		||||
	businessDB := c.Query("businessDB")
 | 
			
		||||
	dbName := c.DefaultQuery("dbName", global.GVA_CONFIG.Mysql.Dbname)
 | 
			
		||||
	tableName := c.Query("tableName")
 | 
			
		||||
	columns, err := autoCodeService.Database(businessDB).GetColumn(businessDB, tableName, dbName)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("获取失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("获取失败", c)
 | 
			
		||||
	} else {
 | 
			
		||||
		response.OkWithDetailed(gin.H{"columns": columns}, "获取成功", c)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CreatePackage
 | 
			
		||||
// @Tags      AutoCode
 | 
			
		||||
// @Summary   创建package
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      system.SysAutoCode                                         true  "创建package"
 | 
			
		||||
// @Success   200   {object}  response.Response{data=map[string]interface{},msg=string}  "创建package成功"
 | 
			
		||||
// @Router    /autoCode/createPackage [post]
 | 
			
		||||
func (autoApi *AutoCodeApi) CreatePackage(c *gin.Context) {
 | 
			
		||||
	var a system.SysAutoCode
 | 
			
		||||
	_ = c.ShouldBindJSON(&a)
 | 
			
		||||
	if err := utils.Verify(a, utils.AutoPackageVerify); err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err := autoCodeService.CreateAutoCode(&a)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
 | 
			
		||||
		global.GVA_LOG.Error("创建成功!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("创建失败", c)
 | 
			
		||||
	} else {
 | 
			
		||||
		response.OkWithMessage("创建成功", c)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetPackage
 | 
			
		||||
// @Tags      AutoCode
 | 
			
		||||
// @Summary   获取package
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Success   200  {object}  response.Response{data=map[string]interface{},msg=string}  "创建package成功"
 | 
			
		||||
// @Router    /autoCode/getPackage [post]
 | 
			
		||||
func (autoApi *AutoCodeApi) GetPackage(c *gin.Context) {
 | 
			
		||||
	pkgs, err := autoCodeService.GetPackage()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("获取失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("获取失败", c)
 | 
			
		||||
	} else {
 | 
			
		||||
		response.OkWithDetailed(gin.H{"pkgs": pkgs}, "获取成功", c)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// DelPackage
 | 
			
		||||
// @Tags      AutoCode
 | 
			
		||||
// @Summary   删除package
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      system.SysAutoCode                                         true  "创建package"
 | 
			
		||||
// @Success   200   {object}  response.Response{data=map[string]interface{},msg=string}  "删除package成功"
 | 
			
		||||
// @Router    /autoCode/delPackage [post]
 | 
			
		||||
func (autoApi *AutoCodeApi) DelPackage(c *gin.Context) {
 | 
			
		||||
	var a system.SysAutoCode
 | 
			
		||||
	_ = c.ShouldBindJSON(&a)
 | 
			
		||||
	err := autoCodeService.DelPackage(a)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("删除失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("删除失败", c)
 | 
			
		||||
	} else {
 | 
			
		||||
		response.OkWithMessage("删除成功", c)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// AutoPlug
 | 
			
		||||
// @Tags      AutoCode
 | 
			
		||||
// @Summary   创建插件模板
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      system.SysAutoCode                                         true  "创建插件模板"
 | 
			
		||||
// @Success   200   {object}  response.Response{data=map[string]interface{},msg=string}  "创建插件模板成功"
 | 
			
		||||
// @Router    /autoCode/createPlug [post]
 | 
			
		||||
func (autoApi *AutoCodeApi) AutoPlug(c *gin.Context) {
 | 
			
		||||
	var a system.AutoPlugReq
 | 
			
		||||
	err := c.ShouldBindJSON(&a)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	a.Snake = strings.ToLower(a.PlugName)
 | 
			
		||||
	a.NeedModel = a.HasRequest || a.HasResponse
 | 
			
		||||
	err = autoCodeService.CreatePlug(a)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("预览失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("预览失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.Ok(c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// InstallPlugin
 | 
			
		||||
// @Tags      AutoCode
 | 
			
		||||
// @Summary   安装插件
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    multipart/form-data
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     plug  formData  file                                              true  "this is a test file"
 | 
			
		||||
// @Success   200   {object}  response.Response{data=[]interface{},msg=string}  "安装插件成功"
 | 
			
		||||
// @Router    /autoCode/installPlugin [post]
 | 
			
		||||
func (autoApi *AutoCodeApi) InstallPlugin(c *gin.Context) {
 | 
			
		||||
	header, err := c.FormFile("plug")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	web, server, err := autoCodeService.InstallPlugin(header)
 | 
			
		||||
	webStr := "web插件安装成功"
 | 
			
		||||
	serverStr := "server插件安装成功"
 | 
			
		||||
	if web == -1 {
 | 
			
		||||
		webStr = "web端插件未成功安装,请按照文档自行解压安装,如果为纯后端插件请忽略此条提示"
 | 
			
		||||
	}
 | 
			
		||||
	if server == -1 {
 | 
			
		||||
		serverStr = "server端插件未成功安装,请按照文档自行解压安装,如果为纯前端插件请忽略此条提示"
 | 
			
		||||
	}
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithData([]interface{}{
 | 
			
		||||
		gin.H{
 | 
			
		||||
			"code": web,
 | 
			
		||||
			"msg":  webStr,
 | 
			
		||||
		},
 | 
			
		||||
		gin.H{
 | 
			
		||||
			"code": server,
 | 
			
		||||
			"msg":  serverStr,
 | 
			
		||||
		}}, c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// PubPlug
 | 
			
		||||
// @Tags      AutoCode
 | 
			
		||||
// @Summary   打包插件
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      system.SysAutoCode                                         true  "打包插件"
 | 
			
		||||
// @Success   200   {object}  response.Response{data=map[string]interface{},msg=string}  "打包插件成功"
 | 
			
		||||
// @Router    /autoCode/pubPlug [get]
 | 
			
		||||
func (autoApi *AutoCodeApi) PubPlug(c *gin.Context) {
 | 
			
		||||
	plugName := c.Query("plugName")
 | 
			
		||||
	snake := strings.ToLower(plugName)
 | 
			
		||||
	zipPath, err := autoCodeService.PubPlug(snake)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("打包失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("打包失败"+err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithMessage(fmt.Sprintf("打包成功,文件路径为:%s", zipPath), c)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										115
									
								
								api/v1/system/sys_auto_code_history.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										115
									
								
								api/v1/system/sys_auto_code_history.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,115 @@
 | 
			
		||||
package system
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/gin-gonic/gin"
 | 
			
		||||
	"go.uber.org/zap"
 | 
			
		||||
	"miniapp/global"
 | 
			
		||||
	"miniapp/model/common/request"
 | 
			
		||||
	"miniapp/model/common/response"
 | 
			
		||||
	systemReq "miniapp/model/system/request"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type AutoCodeHistoryApi struct{}
 | 
			
		||||
 | 
			
		||||
// First
 | 
			
		||||
// @Tags      AutoCode
 | 
			
		||||
// @Summary   获取meta信息
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      request.GetById                                            true  "请求参数"
 | 
			
		||||
// @Success   200   {object}  response.Response{data=map[string]interface{},msg=string}  "获取meta信息"
 | 
			
		||||
// @Router    /autoCode/getMeta [post]
 | 
			
		||||
func (a *AutoCodeHistoryApi) First(c *gin.Context) {
 | 
			
		||||
	var info request.GetById
 | 
			
		||||
	err := c.ShouldBindJSON(&info)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	data, err := autoCodeHistoryService.First(&info)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithDetailed(gin.H{"meta": data}, "获取成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Delete
 | 
			
		||||
// @Tags      AutoCode
 | 
			
		||||
// @Summary   删除回滚记录
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      request.GetById                true  "请求参数"
 | 
			
		||||
// @Success   200   {object}  response.Response{msg=string}  "删除回滚记录"
 | 
			
		||||
// @Router    /autoCode/delSysHistory [post]
 | 
			
		||||
func (a *AutoCodeHistoryApi) Delete(c *gin.Context) {
 | 
			
		||||
	var info request.GetById
 | 
			
		||||
	err := c.ShouldBindJSON(&info)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = autoCodeHistoryService.Delete(&info)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("删除失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("删除失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithMessage("删除成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// RollBack
 | 
			
		||||
// @Tags      AutoCode
 | 
			
		||||
// @Summary   回滚自动生成代码
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      systemReq.RollBack             true  "请求参数"
 | 
			
		||||
// @Success   200   {object}  response.Response{msg=string}  "回滚自动生成代码"
 | 
			
		||||
// @Router    /autoCode/rollback [post]
 | 
			
		||||
func (a *AutoCodeHistoryApi) RollBack(c *gin.Context) {
 | 
			
		||||
	var info systemReq.RollBack
 | 
			
		||||
	err := c.ShouldBindJSON(&info)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = autoCodeHistoryService.RollBack(&info)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithMessage("回滚成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetList
 | 
			
		||||
// @Tags      AutoCode
 | 
			
		||||
// @Summary   查询回滚记录
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      systemReq.SysAutoHistory                                true  "请求参数"
 | 
			
		||||
// @Success   200   {object}  response.Response{data=response.PageResult,msg=string}  "查询回滚记录,返回包括列表,总数,页码,每页数量"
 | 
			
		||||
// @Router    /autoCode/getSysHistory [post]
 | 
			
		||||
func (a *AutoCodeHistoryApi) GetList(c *gin.Context) {
 | 
			
		||||
	var search systemReq.SysAutoHistory
 | 
			
		||||
	err := c.ShouldBindJSON(&search)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	list, total, err := autoCodeHistoryService.GetList(search.PageInfo)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("获取失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("获取失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithDetailed(response.PageResult{
 | 
			
		||||
		List:     list,
 | 
			
		||||
		Total:    total,
 | 
			
		||||
		Page:     search.Page,
 | 
			
		||||
		PageSize: search.PageSize,
 | 
			
		||||
	}, "获取成功", c)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										70
									
								
								api/v1/system/sys_captcha.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								api/v1/system/sys_captcha.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,70 @@
 | 
			
		||||
package system
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/gin-gonic/gin"
 | 
			
		||||
	"github.com/mojocn/base64Captcha"
 | 
			
		||||
	"go.uber.org/zap"
 | 
			
		||||
	"miniapp/global"
 | 
			
		||||
	"miniapp/model/common/response"
 | 
			
		||||
	systemRes "miniapp/model/system/response"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// 当开启多服务器部署时,替换下面的配置,使用redis共享存储验证码
 | 
			
		||||
// var store = captcha.NewDefaultRedisStore()
 | 
			
		||||
var store = base64Captcha.DefaultMemStore
 | 
			
		||||
 | 
			
		||||
type BaseApi struct{}
 | 
			
		||||
 | 
			
		||||
// Captcha
 | 
			
		||||
// @Tags      Base
 | 
			
		||||
// @Summary   生成验证码
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Success   200  {object}  response.Response{data=systemRes.SysCaptchaResponse,msg=string}  "生成验证码,返回包括随机数id,base64,验证码长度,是否开启验证码"
 | 
			
		||||
// @Router    /base/captcha [post]
 | 
			
		||||
func (b *BaseApi) Captcha(c *gin.Context) {
 | 
			
		||||
	// 判断验证码是否开启
 | 
			
		||||
	openCaptcha := global.GVA_CONFIG.Captcha.OpenCaptcha               // 是否开启防爆次数
 | 
			
		||||
	openCaptchaTimeOut := global.GVA_CONFIG.Captcha.OpenCaptchaTimeOut // 缓存超时时间
 | 
			
		||||
	key := c.ClientIP()
 | 
			
		||||
	v, ok := global.BlackCache.Get(key)
 | 
			
		||||
	if !ok {
 | 
			
		||||
		global.BlackCache.Set(key, 1, time.Second*time.Duration(openCaptchaTimeOut))
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var oc bool
 | 
			
		||||
	if openCaptcha == 0 || openCaptcha < interfaceToInt(v) {
 | 
			
		||||
		oc = true
 | 
			
		||||
	}
 | 
			
		||||
	// 字符,公式,验证码配置
 | 
			
		||||
	// 生成默认数字的driver
 | 
			
		||||
	driver := base64Captcha.NewDriverDigit(global.GVA_CONFIG.Captcha.ImgHeight, global.GVA_CONFIG.Captcha.ImgWidth, global.GVA_CONFIG.Captcha.KeyLong, 0.7, 80)
 | 
			
		||||
	// cp := base64Captcha.NewCaptcha(driver, store.UseWithCtx(c))   // v8下使用redis
 | 
			
		||||
	cp := base64Captcha.NewCaptcha(driver, store)
 | 
			
		||||
	id, b64s, err := cp.Generate()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("验证码获取失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("验证码获取失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithDetailed(systemRes.SysCaptchaResponse{
 | 
			
		||||
		CaptchaId:     id,
 | 
			
		||||
		PicPath:       b64s,
 | 
			
		||||
		CaptchaLength: global.GVA_CONFIG.Captcha.KeyLong,
 | 
			
		||||
		OpenCaptcha:   oc,
 | 
			
		||||
	}, "验证码获取成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 类型转换
 | 
			
		||||
func interfaceToInt(v interface{}) (i int) {
 | 
			
		||||
	switch v := v.(type) {
 | 
			
		||||
	case int:
 | 
			
		||||
		i = v
 | 
			
		||||
	default:
 | 
			
		||||
		i = 0
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										68
									
								
								api/v1/system/sys_casbin.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								api/v1/system/sys_casbin.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,68 @@
 | 
			
		||||
package system
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/gin-gonic/gin"
 | 
			
		||||
	"go.uber.org/zap"
 | 
			
		||||
	"miniapp/global"
 | 
			
		||||
	"miniapp/model/common/response"
 | 
			
		||||
	"miniapp/model/system/request"
 | 
			
		||||
	systemRes "miniapp/model/system/response"
 | 
			
		||||
	"miniapp/utils"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type CasbinApi struct{}
 | 
			
		||||
 | 
			
		||||
// UpdateCasbin
 | 
			
		||||
// @Tags      Casbin
 | 
			
		||||
// @Summary   更新角色api权限
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      request.CasbinInReceive        true  "权限id, 权限模型列表"
 | 
			
		||||
// @Success   200   {object}  response.Response{msg=string}  "更新角色api权限"
 | 
			
		||||
// @Router    /casbin/UpdateCasbin [post]
 | 
			
		||||
func (cas *CasbinApi) UpdateCasbin(c *gin.Context) {
 | 
			
		||||
	var cmr request.CasbinInReceive
 | 
			
		||||
	err := c.ShouldBindJSON(&cmr)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = utils.Verify(cmr, utils.AuthorityIdVerify)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = casbinService.UpdateCasbin(cmr.AuthorityId, cmr.CasbinInfos)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("更新失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("更新失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithMessage("更新成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetPolicyPathByAuthorityId
 | 
			
		||||
// @Tags      Casbin
 | 
			
		||||
// @Summary   获取权限列表
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      request.CasbinInReceive                                          true  "权限id, 权限模型列表"
 | 
			
		||||
// @Success   200   {object}  response.Response{data=systemRes.PolicyPathResponse,msg=string}  "获取权限列表,返回包括casbin详情列表"
 | 
			
		||||
// @Router    /casbin/getPolicyPathByAuthorityId [post]
 | 
			
		||||
func (cas *CasbinApi) GetPolicyPathByAuthorityId(c *gin.Context) {
 | 
			
		||||
	var casbin request.CasbinInReceive
 | 
			
		||||
	err := c.ShouldBindJSON(&casbin)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = utils.Verify(casbin, utils.AuthorityIdVerify)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	paths := casbinService.GetPolicyPathByAuthorityId(casbin.AuthorityId)
 | 
			
		||||
	response.OkWithDetailed(systemRes.PolicyPathResponse{Paths: paths}, "获取成功", c)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										71
									
								
								api/v1/system/sys_chatgpt.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								api/v1/system/sys_chatgpt.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,71 @@
 | 
			
		||||
package system
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/gin-gonic/gin"
 | 
			
		||||
	"go.uber.org/zap"
 | 
			
		||||
	"miniapp/global"
 | 
			
		||||
	"miniapp/model/common/response"
 | 
			
		||||
	sysModel "miniapp/model/system"
 | 
			
		||||
	"miniapp/model/system/request"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type ChatGptApi struct{}
 | 
			
		||||
 | 
			
		||||
func (chat *ChatGptApi) CreateSK(c *gin.Context) {
 | 
			
		||||
	var option sysModel.SysChatGptOption
 | 
			
		||||
	c.ShouldBindJSON(&option)
 | 
			
		||||
	err := chatGptService.CreateSK(option)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("创建失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("创建失败"+err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithMessage("创建成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (chat *ChatGptApi) GetSK(c *gin.Context) {
 | 
			
		||||
	var option sysModel.SysChatGptOption
 | 
			
		||||
	c.ShouldBindJSON(&option)
 | 
			
		||||
	_, err := chatGptService.GetSK()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.OkWithDetailed(gin.H{
 | 
			
		||||
			"ok": false,
 | 
			
		||||
		}, "无sk或获取失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithDetailed(gin.H{
 | 
			
		||||
		"ok": true,
 | 
			
		||||
	}, "获取成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (chat *ChatGptApi) DeleteSK(c *gin.Context) {
 | 
			
		||||
	err := chatGptService.DeleteSK()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("删除失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("删除失败"+err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithMessage("删除成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (chat *ChatGptApi) GetTable(c *gin.Context) {
 | 
			
		||||
	var req request.ChatGptRequest
 | 
			
		||||
	err := c.ShouldBindJSON(&req)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	sql, results, err := chatGptService.GetTable(req)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("查询失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithDetailed(gin.H{
 | 
			
		||||
			"sql":     sql,
 | 
			
		||||
			"results": results,
 | 
			
		||||
		}, "生成失败"+err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithDetailed(gin.H{
 | 
			
		||||
		"sql":     sql,
 | 
			
		||||
		"results": results,
 | 
			
		||||
	}, "ChatGpt生成完成", c)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										148
									
								
								api/v1/system/sys_dictionary.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										148
									
								
								api/v1/system/sys_dictionary.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,148 @@
 | 
			
		||||
package system
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/gin-gonic/gin"
 | 
			
		||||
	"go.uber.org/zap"
 | 
			
		||||
	"miniapp/global"
 | 
			
		||||
	"miniapp/model/common/response"
 | 
			
		||||
	"miniapp/model/system"
 | 
			
		||||
	"miniapp/model/system/request"
 | 
			
		||||
	"miniapp/utils"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type DictionaryApi struct{}
 | 
			
		||||
 | 
			
		||||
// CreateSysDictionary
 | 
			
		||||
// @Tags      SysDictionary
 | 
			
		||||
// @Summary   创建SysDictionary
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      system.SysDictionary           true  "SysDictionary模型"
 | 
			
		||||
// @Success   200   {object}  response.Response{msg=string}  "创建SysDictionary"
 | 
			
		||||
// @Router    /sysDictionary/createSysDictionary [post]
 | 
			
		||||
func (s *DictionaryApi) CreateSysDictionary(c *gin.Context) {
 | 
			
		||||
	var dictionary system.SysDictionary
 | 
			
		||||
	err := c.ShouldBindJSON(&dictionary)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = dictionaryService.CreateSysDictionary(dictionary)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("创建失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("创建失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithMessage("创建成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// DeleteSysDictionary
 | 
			
		||||
// @Tags      SysDictionary
 | 
			
		||||
// @Summary   删除SysDictionary
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      system.SysDictionary           true  "SysDictionary模型"
 | 
			
		||||
// @Success   200   {object}  response.Response{msg=string}  "删除SysDictionary"
 | 
			
		||||
// @Router    /sysDictionary/deleteSysDictionary [delete]
 | 
			
		||||
func (s *DictionaryApi) DeleteSysDictionary(c *gin.Context) {
 | 
			
		||||
	var dictionary system.SysDictionary
 | 
			
		||||
	err := c.ShouldBindJSON(&dictionary)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = dictionaryService.DeleteSysDictionary(dictionary)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("删除失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("删除失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithMessage("删除成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UpdateSysDictionary
 | 
			
		||||
// @Tags      SysDictionary
 | 
			
		||||
// @Summary   更新SysDictionary
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      system.SysDictionary           true  "SysDictionary模型"
 | 
			
		||||
// @Success   200   {object}  response.Response{msg=string}  "更新SysDictionary"
 | 
			
		||||
// @Router    /sysDictionary/updateSysDictionary [put]
 | 
			
		||||
func (s *DictionaryApi) UpdateSysDictionary(c *gin.Context) {
 | 
			
		||||
	var dictionary system.SysDictionary
 | 
			
		||||
	err := c.ShouldBindJSON(&dictionary)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = dictionaryService.UpdateSysDictionary(&dictionary)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("更新失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("更新失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithMessage("更新成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// FindSysDictionary
 | 
			
		||||
// @Tags      SysDictionary
 | 
			
		||||
// @Summary   用id查询SysDictionary
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  query     system.SysDictionary                                       true  "ID或字典英名"
 | 
			
		||||
// @Success   200   {object}  response.Response{data=map[string]interface{},msg=string}  "用id查询SysDictionary"
 | 
			
		||||
// @Router    /sysDictionary/findSysDictionary [get]
 | 
			
		||||
func (s *DictionaryApi) FindSysDictionary(c *gin.Context) {
 | 
			
		||||
	var dictionary system.SysDictionary
 | 
			
		||||
	err := c.ShouldBindQuery(&dictionary)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	sysDictionary, err := dictionaryService.GetSysDictionary(dictionary.Type, dictionary.ID, dictionary.Status)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("字典未创建或未开启!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("字典未创建或未开启", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithDetailed(gin.H{"resysDictionary": sysDictionary}, "查询成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetSysDictionaryList
 | 
			
		||||
// @Tags      SysDictionary
 | 
			
		||||
// @Summary   分页获取SysDictionary列表
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  query     request.SysDictionarySearch                             true  "页码, 每页大小, 搜索条件"
 | 
			
		||||
// @Success   200   {object}  response.Response{data=response.PageResult,msg=string}  "分页获取SysDictionary列表,返回包括列表,总数,页码,每页数量"
 | 
			
		||||
// @Router    /sysDictionary/getSysDictionaryList [get]
 | 
			
		||||
func (s *DictionaryApi) GetSysDictionaryList(c *gin.Context) {
 | 
			
		||||
	var pageInfo request.SysDictionarySearch
 | 
			
		||||
	err := c.ShouldBindQuery(&pageInfo)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = utils.Verify(pageInfo.PageInfo, utils.PageInfoVerify)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	list, total, err := dictionaryService.GetSysDictionaryInfoList(pageInfo)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("获取失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("获取失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithDetailed(response.PageResult{
 | 
			
		||||
		List:     list,
 | 
			
		||||
		Total:    total,
 | 
			
		||||
		Page:     pageInfo.Page,
 | 
			
		||||
		PageSize: pageInfo.PageSize,
 | 
			
		||||
	}, "获取成功", c)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										148
									
								
								api/v1/system/sys_dictionary_detail.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										148
									
								
								api/v1/system/sys_dictionary_detail.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,148 @@
 | 
			
		||||
package system
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/gin-gonic/gin"
 | 
			
		||||
	"go.uber.org/zap"
 | 
			
		||||
	"miniapp/global"
 | 
			
		||||
	"miniapp/model/common/response"
 | 
			
		||||
	"miniapp/model/system"
 | 
			
		||||
	"miniapp/model/system/request"
 | 
			
		||||
	"miniapp/utils"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type DictionaryDetailApi struct{}
 | 
			
		||||
 | 
			
		||||
// CreateSysDictionaryDetail
 | 
			
		||||
// @Tags      SysDictionaryDetail
 | 
			
		||||
// @Summary   创建SysDictionaryDetail
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      system.SysDictionaryDetail     true  "SysDictionaryDetail模型"
 | 
			
		||||
// @Success   200   {object}  response.Response{msg=string}  "创建SysDictionaryDetail"
 | 
			
		||||
// @Router    /sysDictionaryDetail/createSysDictionaryDetail [post]
 | 
			
		||||
func (s *DictionaryDetailApi) CreateSysDictionaryDetail(c *gin.Context) {
 | 
			
		||||
	var detail system.SysDictionaryDetail
 | 
			
		||||
	err := c.ShouldBindJSON(&detail)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = dictionaryDetailService.CreateSysDictionaryDetail(detail)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("创建失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("创建失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithMessage("创建成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// DeleteSysDictionaryDetail
 | 
			
		||||
// @Tags      SysDictionaryDetail
 | 
			
		||||
// @Summary   删除SysDictionaryDetail
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      system.SysDictionaryDetail     true  "SysDictionaryDetail模型"
 | 
			
		||||
// @Success   200   {object}  response.Response{msg=string}  "删除SysDictionaryDetail"
 | 
			
		||||
// @Router    /sysDictionaryDetail/deleteSysDictionaryDetail [delete]
 | 
			
		||||
func (s *DictionaryDetailApi) DeleteSysDictionaryDetail(c *gin.Context) {
 | 
			
		||||
	var detail system.SysDictionaryDetail
 | 
			
		||||
	err := c.ShouldBindJSON(&detail)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = dictionaryDetailService.DeleteSysDictionaryDetail(detail)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("删除失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("删除失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithMessage("删除成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UpdateSysDictionaryDetail
 | 
			
		||||
// @Tags      SysDictionaryDetail
 | 
			
		||||
// @Summary   更新SysDictionaryDetail
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      system.SysDictionaryDetail     true  "更新SysDictionaryDetail"
 | 
			
		||||
// @Success   200   {object}  response.Response{msg=string}  "更新SysDictionaryDetail"
 | 
			
		||||
// @Router    /sysDictionaryDetail/updateSysDictionaryDetail [put]
 | 
			
		||||
func (s *DictionaryDetailApi) UpdateSysDictionaryDetail(c *gin.Context) {
 | 
			
		||||
	var detail system.SysDictionaryDetail
 | 
			
		||||
	err := c.ShouldBindJSON(&detail)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = dictionaryDetailService.UpdateSysDictionaryDetail(&detail)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("更新失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("更新失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithMessage("更新成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// FindSysDictionaryDetail
 | 
			
		||||
// @Tags      SysDictionaryDetail
 | 
			
		||||
// @Summary   用id查询SysDictionaryDetail
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  query     system.SysDictionaryDetail                                 true  "用id查询SysDictionaryDetail"
 | 
			
		||||
// @Success   200   {object}  response.Response{data=map[string]interface{},msg=string}  "用id查询SysDictionaryDetail"
 | 
			
		||||
// @Router    /sysDictionaryDetail/findSysDictionaryDetail [get]
 | 
			
		||||
func (s *DictionaryDetailApi) FindSysDictionaryDetail(c *gin.Context) {
 | 
			
		||||
	var detail system.SysDictionaryDetail
 | 
			
		||||
	err := c.ShouldBindQuery(&detail)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = utils.Verify(detail, utils.IdVerify)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	reSysDictionaryDetail, err := dictionaryDetailService.GetSysDictionaryDetail(detail.ID)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("查询失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("查询失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithDetailed(gin.H{"reSysDictionaryDetail": reSysDictionaryDetail}, "查询成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetSysDictionaryDetailList
 | 
			
		||||
// @Tags      SysDictionaryDetail
 | 
			
		||||
// @Summary   分页获取SysDictionaryDetail列表
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  query     request.SysDictionaryDetailSearch                       true  "页码, 每页大小, 搜索条件"
 | 
			
		||||
// @Success   200   {object}  response.Response{data=response.PageResult,msg=string}  "分页获取SysDictionaryDetail列表,返回包括列表,总数,页码,每页数量"
 | 
			
		||||
// @Router    /sysDictionaryDetail/getSysDictionaryDetailList [get]
 | 
			
		||||
func (s *DictionaryDetailApi) GetSysDictionaryDetailList(c *gin.Context) {
 | 
			
		||||
	var pageInfo request.SysDictionaryDetailSearch
 | 
			
		||||
	err := c.ShouldBindQuery(&pageInfo)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	list, total, err := dictionaryDetailService.GetSysDictionaryDetailInfoList(pageInfo)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("获取失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("获取失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithDetailed(response.PageResult{
 | 
			
		||||
		List:     list,
 | 
			
		||||
		Total:    total,
 | 
			
		||||
		Page:     pageInfo.Page,
 | 
			
		||||
		PageSize: pageInfo.PageSize,
 | 
			
		||||
	}, "获取成功", c)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										59
									
								
								api/v1/system/sys_initdb.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								api/v1/system/sys_initdb.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,59 @@
 | 
			
		||||
package system
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"go.uber.org/zap"
 | 
			
		||||
	"miniapp/global"
 | 
			
		||||
	"miniapp/model/common/response"
 | 
			
		||||
	"miniapp/model/system/request"
 | 
			
		||||
 | 
			
		||||
	"github.com/gin-gonic/gin"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type DBApi struct{}
 | 
			
		||||
 | 
			
		||||
// InitDB
 | 
			
		||||
// @Tags     InitDB
 | 
			
		||||
// @Summary  初始化用户数据库
 | 
			
		||||
// @Produce  application/json
 | 
			
		||||
// @Param    data  body      request.InitDB                  true  "初始化数据库参数"
 | 
			
		||||
// @Success  200   {object}  response.Response{data=string}  "初始化用户数据库"
 | 
			
		||||
// @Router   /init/initdb [post]
 | 
			
		||||
func (i *DBApi) InitDB(c *gin.Context) {
 | 
			
		||||
	if global.GVA_DB != nil {
 | 
			
		||||
		global.GVA_LOG.Error("已存在数据库配置!")
 | 
			
		||||
		response.FailWithMessage("已存在数据库配置", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	var dbInfo request.InitDB
 | 
			
		||||
	if err := c.ShouldBindJSON(&dbInfo); err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("参数校验不通过!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("参数校验不通过", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	if err := initDBService.InitDB(dbInfo); err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("自动创建数据库失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("自动创建数据库失败,请查看后台日志,检查后在进行初始化", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithMessage("自动创建数据库成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CheckDB
 | 
			
		||||
// @Tags     CheckDB
 | 
			
		||||
// @Summary  初始化用户数据库
 | 
			
		||||
// @Produce  application/json
 | 
			
		||||
// @Success  200  {object}  response.Response{data=map[string]interface{},msg=string}  "初始化用户数据库"
 | 
			
		||||
// @Router   /init/checkdb [post]
 | 
			
		||||
func (i *DBApi) CheckDB(c *gin.Context) {
 | 
			
		||||
	var (
 | 
			
		||||
		message  = "前往初始化数据库"
 | 
			
		||||
		needInit = true
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	if global.GVA_DB != nil {
 | 
			
		||||
		message = "数据库无需初始化"
 | 
			
		||||
		needInit = false
 | 
			
		||||
	}
 | 
			
		||||
	global.GVA_LOG.Info(message)
 | 
			
		||||
	response.OkWithDetailed(gin.H{"needInit": needInit}, message, c)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										31
									
								
								api/v1/system/sys_jwt_blacklist.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								api/v1/system/sys_jwt_blacklist.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
			
		||||
package system
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/gin-gonic/gin"
 | 
			
		||||
	"go.uber.org/zap"
 | 
			
		||||
	"miniapp/global"
 | 
			
		||||
	"miniapp/model/common/response"
 | 
			
		||||
	"miniapp/model/system"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type JwtApi struct{}
 | 
			
		||||
 | 
			
		||||
// JsonInBlacklist
 | 
			
		||||
// @Tags      Jwt
 | 
			
		||||
// @Summary   jwt加入黑名单
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Success   200  {object}  response.Response{msg=string}  "jwt加入黑名单"
 | 
			
		||||
// @Router    /jwt/jsonInBlacklist [post]
 | 
			
		||||
func (j *JwtApi) JsonInBlacklist(c *gin.Context) {
 | 
			
		||||
	token := c.Request.Header.Get("x-token")
 | 
			
		||||
	jwt := system.JwtBlacklist{Jwt: token}
 | 
			
		||||
	err := jwtService.JsonInBlacklist(jwt)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("jwt作废失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("jwt作废失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithMessage("jwt作废成功", c)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										278
									
								
								api/v1/system/sys_menu.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										278
									
								
								api/v1/system/sys_menu.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,278 @@
 | 
			
		||||
package system
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"miniapp/global"
 | 
			
		||||
	"miniapp/model/common/request"
 | 
			
		||||
	"miniapp/model/common/response"
 | 
			
		||||
	"miniapp/model/system"
 | 
			
		||||
	systemReq "miniapp/model/system/request"
 | 
			
		||||
	systemRes "miniapp/model/system/response"
 | 
			
		||||
	"miniapp/utils"
 | 
			
		||||
 | 
			
		||||
	"github.com/gin-gonic/gin"
 | 
			
		||||
	"go.uber.org/zap"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type AuthorityMenuApi struct{}
 | 
			
		||||
 | 
			
		||||
// GetMenu
 | 
			
		||||
// @Tags      AuthorityMenu
 | 
			
		||||
// @Summary   获取用户动态路由
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      request.Empty                                                  true  "空"
 | 
			
		||||
// @Success   200   {object}  response.Response{data=systemRes.SysMenusResponse,msg=string}  "获取用户动态路由,返回包括系统菜单详情列表"
 | 
			
		||||
// @Router    /menu/getMenu [post]
 | 
			
		||||
func (a *AuthorityMenuApi) GetMenu(c *gin.Context) {
 | 
			
		||||
	menus, err := menuService.GetMenuTree(utils.GetUserAuthorityId(c))
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("获取失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("获取失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	if menus == nil {
 | 
			
		||||
		menus = []system.SysMenu{}
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithDetailed(systemRes.SysMenusResponse{Menus: menus}, "获取成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetBaseMenuTree
 | 
			
		||||
// @Tags      AuthorityMenu
 | 
			
		||||
// @Summary   获取用户动态路由
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      request.Empty                                                      true  "空"
 | 
			
		||||
// @Success   200   {object}  response.Response{data=systemRes.SysBaseMenusResponse,msg=string}  "获取用户动态路由,返回包括系统菜单列表"
 | 
			
		||||
// @Router    /menu/getBaseMenuTree [post]
 | 
			
		||||
func (a *AuthorityMenuApi) GetBaseMenuTree(c *gin.Context) {
 | 
			
		||||
	menus, err := menuService.GetBaseMenuTree()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("获取失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("获取失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithDetailed(systemRes.SysBaseMenusResponse{Menus: menus}, "获取成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// AddMenuAuthority
 | 
			
		||||
// @Tags      AuthorityMenu
 | 
			
		||||
// @Summary   增加menu和角色关联关系
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      systemReq.AddMenuAuthorityInfo  true  "角色ID"
 | 
			
		||||
// @Success   200   {object}  response.Response{msg=string}   "增加menu和角色关联关系"
 | 
			
		||||
// @Router    /menu/addMenuAuthority [post]
 | 
			
		||||
func (a *AuthorityMenuApi) AddMenuAuthority(c *gin.Context) {
 | 
			
		||||
	var authorityMenu systemReq.AddMenuAuthorityInfo
 | 
			
		||||
	err := c.ShouldBindJSON(&authorityMenu)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	if err := utils.Verify(authorityMenu, utils.AuthorityIdVerify); err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	if err := menuService.AddMenuAuthority(authorityMenu.Menus, authorityMenu.AuthorityId); err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("添加失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("添加失败", c)
 | 
			
		||||
	} else {
 | 
			
		||||
		response.OkWithMessage("添加成功", c)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetMenuAuthority
 | 
			
		||||
// @Tags      AuthorityMenu
 | 
			
		||||
// @Summary   获取指定角色menu
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      request.GetAuthorityId                                     true  "角色ID"
 | 
			
		||||
// @Success   200   {object}  response.Response{data=map[string]interface{},msg=string}  "获取指定角色menu"
 | 
			
		||||
// @Router    /menu/getMenuAuthority [post]
 | 
			
		||||
func (a *AuthorityMenuApi) GetMenuAuthority(c *gin.Context) {
 | 
			
		||||
	var param request.GetAuthorityId
 | 
			
		||||
	err := c.ShouldBindJSON(¶m)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = utils.Verify(param, utils.AuthorityIdVerify)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	menus, err := menuService.GetMenuAuthority(¶m)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("获取失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithDetailed(systemRes.SysMenusResponse{Menus: menus}, "获取失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithDetailed(gin.H{"menus": menus}, "获取成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// AddBaseMenu
 | 
			
		||||
// @Tags      Menu
 | 
			
		||||
// @Summary   新增菜单
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      system.SysBaseMenu             true  "路由path, 父菜单ID, 路由name, 对应前端文件路径, 排序标记"
 | 
			
		||||
// @Success   200   {object}  response.Response{msg=string}  "新增菜单"
 | 
			
		||||
// @Router    /menu/addBaseMenu [post]
 | 
			
		||||
func (a *AuthorityMenuApi) AddBaseMenu(c *gin.Context) {
 | 
			
		||||
	var menu system.SysBaseMenu
 | 
			
		||||
	err := c.ShouldBindJSON(&menu)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = utils.Verify(menu, utils.MenuVerify)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = utils.Verify(menu.Meta, utils.MenuMetaVerify)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = menuService.AddBaseMenu(menu)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("添加失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("添加失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithMessage("添加成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// DeleteBaseMenu
 | 
			
		||||
// @Tags      Menu
 | 
			
		||||
// @Summary   删除菜单
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      request.GetById                true  "菜单id"
 | 
			
		||||
// @Success   200   {object}  response.Response{msg=string}  "删除菜单"
 | 
			
		||||
// @Router    /menu/deleteBaseMenu [post]
 | 
			
		||||
func (a *AuthorityMenuApi) DeleteBaseMenu(c *gin.Context) {
 | 
			
		||||
	var menu request.GetById
 | 
			
		||||
	err := c.ShouldBindJSON(&menu)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = utils.Verify(menu, utils.IdVerify)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = baseMenuService.DeleteBaseMenu(menu.ID)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("删除失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("删除失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithMessage("删除成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UpdateBaseMenu
 | 
			
		||||
// @Tags      Menu
 | 
			
		||||
// @Summary   更新菜单
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      system.SysBaseMenu             true  "路由path, 父菜单ID, 路由name, 对应前端文件路径, 排序标记"
 | 
			
		||||
// @Success   200   {object}  response.Response{msg=string}  "更新菜单"
 | 
			
		||||
// @Router    /menu/updateBaseMenu [post]
 | 
			
		||||
func (a *AuthorityMenuApi) UpdateBaseMenu(c *gin.Context) {
 | 
			
		||||
	var menu system.SysBaseMenu
 | 
			
		||||
	err := c.ShouldBindJSON(&menu)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = utils.Verify(menu, utils.MenuVerify)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = utils.Verify(menu.Meta, utils.MenuMetaVerify)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = baseMenuService.UpdateBaseMenu(menu)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("更新失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("更新失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithMessage("更新成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetBaseMenuById
 | 
			
		||||
// @Tags      Menu
 | 
			
		||||
// @Summary   根据id获取菜单
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      request.GetById                                                   true  "菜单id"
 | 
			
		||||
// @Success   200   {object}  response.Response{data=systemRes.SysBaseMenuResponse,msg=string}  "根据id获取菜单,返回包括系统菜单列表"
 | 
			
		||||
// @Router    /menu/getBaseMenuById [post]
 | 
			
		||||
func (a *AuthorityMenuApi) GetBaseMenuById(c *gin.Context) {
 | 
			
		||||
	var idInfo request.GetById
 | 
			
		||||
	err := c.ShouldBindJSON(&idInfo)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = utils.Verify(idInfo, utils.IdVerify)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	menu, err := baseMenuService.GetBaseMenuById(idInfo.ID)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("获取失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("获取失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithDetailed(systemRes.SysBaseMenuResponse{Menu: menu}, "获取成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetMenuList
 | 
			
		||||
// @Tags      Menu
 | 
			
		||||
// @Summary   分页获取基础menu列表
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      request.PageInfo                                        true  "页码, 每页大小"
 | 
			
		||||
// @Success   200   {object}  response.Response{data=response.PageResult,msg=string}  "分页获取基础menu列表,返回包括列表,总数,页码,每页数量"
 | 
			
		||||
// @Router    /menu/getMenuList [post]
 | 
			
		||||
func (a *AuthorityMenuApi) GetMenuList(c *gin.Context) {
 | 
			
		||||
	var pageInfo request.PageInfo
 | 
			
		||||
	err := c.ShouldBindJSON(&pageInfo)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = utils.Verify(pageInfo, utils.PageInfoVerify)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	menuList, total, err := menuService.GetInfoList()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("获取失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("获取失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithDetailed(response.PageResult{
 | 
			
		||||
		List:     menuList,
 | 
			
		||||
		Total:    total,
 | 
			
		||||
		Page:     pageInfo.Page,
 | 
			
		||||
		PageSize: pageInfo.PageSize,
 | 
			
		||||
	}, "获取成功", c)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										149
									
								
								api/v1/system/sys_operation_record.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										149
									
								
								api/v1/system/sys_operation_record.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,149 @@
 | 
			
		||||
package system
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/gin-gonic/gin"
 | 
			
		||||
	"go.uber.org/zap"
 | 
			
		||||
	"miniapp/global"
 | 
			
		||||
	"miniapp/model/common/request"
 | 
			
		||||
	"miniapp/model/common/response"
 | 
			
		||||
	"miniapp/model/system"
 | 
			
		||||
	systemReq "miniapp/model/system/request"
 | 
			
		||||
	"miniapp/utils"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type OperationRecordApi struct{}
 | 
			
		||||
 | 
			
		||||
// CreateSysOperationRecord
 | 
			
		||||
// @Tags      SysOperationRecord
 | 
			
		||||
// @Summary   创建SysOperationRecord
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      system.SysOperationRecord      true  "创建SysOperationRecord"
 | 
			
		||||
// @Success   200   {object}  response.Response{msg=string}  "创建SysOperationRecord"
 | 
			
		||||
// @Router    /sysOperationRecord/createSysOperationRecord [post]
 | 
			
		||||
func (s *OperationRecordApi) CreateSysOperationRecord(c *gin.Context) {
 | 
			
		||||
	var sysOperationRecord system.SysOperationRecord
 | 
			
		||||
	err := c.ShouldBindJSON(&sysOperationRecord)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = operationRecordService.CreateSysOperationRecord(sysOperationRecord)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("创建失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("创建失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithMessage("创建成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// DeleteSysOperationRecord
 | 
			
		||||
// @Tags      SysOperationRecord
 | 
			
		||||
// @Summary   删除SysOperationRecord
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      system.SysOperationRecord      true  "SysOperationRecord模型"
 | 
			
		||||
// @Success   200   {object}  response.Response{msg=string}  "删除SysOperationRecord"
 | 
			
		||||
// @Router    /sysOperationRecord/deleteSysOperationRecord [delete]
 | 
			
		||||
func (s *OperationRecordApi) DeleteSysOperationRecord(c *gin.Context) {
 | 
			
		||||
	var sysOperationRecord system.SysOperationRecord
 | 
			
		||||
	err := c.ShouldBindJSON(&sysOperationRecord)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = operationRecordService.DeleteSysOperationRecord(sysOperationRecord)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("删除失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("删除失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithMessage("删除成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// DeleteSysOperationRecordByIds
 | 
			
		||||
// @Tags      SysOperationRecord
 | 
			
		||||
// @Summary   批量删除SysOperationRecord
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      request.IdsReq                 true  "批量删除SysOperationRecord"
 | 
			
		||||
// @Success   200   {object}  response.Response{msg=string}  "批量删除SysOperationRecord"
 | 
			
		||||
// @Router    /sysOperationRecord/deleteSysOperationRecordByIds [delete]
 | 
			
		||||
func (s *OperationRecordApi) DeleteSysOperationRecordByIds(c *gin.Context) {
 | 
			
		||||
	var IDS request.IdsReq
 | 
			
		||||
	err := c.ShouldBindJSON(&IDS)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = operationRecordService.DeleteSysOperationRecordByIds(IDS)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("批量删除失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("批量删除失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithMessage("批量删除成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// FindSysOperationRecord
 | 
			
		||||
// @Tags      SysOperationRecord
 | 
			
		||||
// @Summary   用id查询SysOperationRecord
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  query     system.SysOperationRecord                                  true  "Id"
 | 
			
		||||
// @Success   200   {object}  response.Response{data=map[string]interface{},msg=string}  "用id查询SysOperationRecord"
 | 
			
		||||
// @Router    /sysOperationRecord/findSysOperationRecord [get]
 | 
			
		||||
func (s *OperationRecordApi) FindSysOperationRecord(c *gin.Context) {
 | 
			
		||||
	var sysOperationRecord system.SysOperationRecord
 | 
			
		||||
	err := c.ShouldBindQuery(&sysOperationRecord)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = utils.Verify(sysOperationRecord, utils.IdVerify)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	reSysOperationRecord, err := operationRecordService.GetSysOperationRecord(sysOperationRecord.ID)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("查询失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("查询失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithDetailed(gin.H{"reSysOperationRecord": reSysOperationRecord}, "查询成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetSysOperationRecordList
 | 
			
		||||
// @Tags      SysOperationRecord
 | 
			
		||||
// @Summary   分页获取SysOperationRecord列表
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  query     request.SysOperationRecordSearch                        true  "页码, 每页大小, 搜索条件"
 | 
			
		||||
// @Success   200   {object}  response.Response{data=response.PageResult,msg=string}  "分页获取SysOperationRecord列表,返回包括列表,总数,页码,每页数量"
 | 
			
		||||
// @Router    /sysOperationRecord/getSysOperationRecordList [get]
 | 
			
		||||
func (s *OperationRecordApi) GetSysOperationRecordList(c *gin.Context) {
 | 
			
		||||
	var pageInfo systemReq.SysOperationRecordSearch
 | 
			
		||||
	err := c.ShouldBindQuery(&pageInfo)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	list, total, err := operationRecordService.GetSysOperationRecordInfoList(pageInfo)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("获取失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("获取失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithDetailed(response.PageResult{
 | 
			
		||||
		List:     list,
 | 
			
		||||
		Total:    total,
 | 
			
		||||
		Page:     pageInfo.Page,
 | 
			
		||||
		PageSize: pageInfo.PageSize,
 | 
			
		||||
	}, "获取成功", c)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										89
									
								
								api/v1/system/sys_system.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								api/v1/system/sys_system.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,89 @@
 | 
			
		||||
package system
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"miniapp/global"
 | 
			
		||||
	"miniapp/model/common/response"
 | 
			
		||||
	"miniapp/model/system"
 | 
			
		||||
	systemRes "miniapp/model/system/response"
 | 
			
		||||
	"miniapp/utils"
 | 
			
		||||
 | 
			
		||||
	"github.com/gin-gonic/gin"
 | 
			
		||||
	"go.uber.org/zap"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type SystemApi struct{}
 | 
			
		||||
 | 
			
		||||
// GetSystemConfig
 | 
			
		||||
// @Tags      System
 | 
			
		||||
// @Summary   获取配置文件内容
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Success   200  {object}  response.Response{data=systemRes.SysConfigResponse,msg=string}  "获取配置文件内容,返回包括系统配置"
 | 
			
		||||
// @Router    /system/getSystemConfig [post]
 | 
			
		||||
func (s *SystemApi) GetSystemConfig(c *gin.Context) {
 | 
			
		||||
	config, err := systemConfigService.GetSystemConfig()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("获取失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("获取失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithDetailed(systemRes.SysConfigResponse{Config: config}, "获取成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// SetSystemConfig
 | 
			
		||||
// @Tags      System
 | 
			
		||||
// @Summary   设置配置文件内容
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      system.System                   true  "设置配置文件内容"
 | 
			
		||||
// @Success   200   {object}  response.Response{data=string}  "设置配置文件内容"
 | 
			
		||||
// @Router    /system/setSystemConfig [post]
 | 
			
		||||
func (s *SystemApi) SetSystemConfig(c *gin.Context) {
 | 
			
		||||
	var sys system.System
 | 
			
		||||
	err := c.ShouldBindJSON(&sys)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = systemConfigService.SetSystemConfig(sys)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("设置失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("设置失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithMessage("设置成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ReloadSystem
 | 
			
		||||
// @Tags      System
 | 
			
		||||
// @Summary   重启系统
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Success   200  {object}  response.Response{msg=string}  "重启系统"
 | 
			
		||||
// @Router    /system/reloadSystem [post]
 | 
			
		||||
func (s *SystemApi) ReloadSystem(c *gin.Context) {
 | 
			
		||||
	err := utils.Reload()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("重启系统失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("重启系统失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithMessage("重启系统成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetServerInfo
 | 
			
		||||
// @Tags      System
 | 
			
		||||
// @Summary   获取服务器信息
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Success   200  {object}  response.Response{data=map[string]interface{},msg=string}  "获取服务器信息"
 | 
			
		||||
// @Router    /system/getServerInfo [post]
 | 
			
		||||
func (s *SystemApi) GetServerInfo(c *gin.Context) {
 | 
			
		||||
	server, err := systemConfigService.GetServerInfo()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("获取失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("获取失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithDetailed(gin.H{"server.exe.exe": server}, "获取成功", c)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										462
									
								
								api/v1/system/sys_user.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										462
									
								
								api/v1/system/sys_user.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,462 @@
 | 
			
		||||
package system
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"strconv"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"miniapp/global"
 | 
			
		||||
	"miniapp/model/common/request"
 | 
			
		||||
	"miniapp/model/common/response"
 | 
			
		||||
	"miniapp/model/system"
 | 
			
		||||
	systemReq "miniapp/model/system/request"
 | 
			
		||||
	systemRes "miniapp/model/system/response"
 | 
			
		||||
	"miniapp/utils"
 | 
			
		||||
 | 
			
		||||
	"github.com/gin-gonic/gin"
 | 
			
		||||
	"github.com/redis/go-redis/v9"
 | 
			
		||||
	"go.uber.org/zap"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Login
 | 
			
		||||
// @Tags     Base
 | 
			
		||||
// @Summary  用户登录
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param    data  body      systemReq.Login                                             true  "用户名, 密码, 验证码"
 | 
			
		||||
// @Success  200   {object}  response.Response{data=systemRes.LoginResponse,msg=string}  "返回包括用户信息,token,过期时间"
 | 
			
		||||
// @Router   /base/login [post]
 | 
			
		||||
func (b *BaseApi) Login(c *gin.Context) {
 | 
			
		||||
	var l systemReq.Login
 | 
			
		||||
	err := c.ShouldBindJSON(&l)
 | 
			
		||||
	key := c.ClientIP()
 | 
			
		||||
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = utils.Verify(l, utils.LoginVerify)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 判断验证码是否开启
 | 
			
		||||
	openCaptcha := global.GVA_CONFIG.Captcha.OpenCaptcha               // 是否开启防爆次数
 | 
			
		||||
	openCaptchaTimeOut := global.GVA_CONFIG.Captcha.OpenCaptchaTimeOut // 缓存超时时间
 | 
			
		||||
	v, ok := global.BlackCache.Get(key)
 | 
			
		||||
	if !ok {
 | 
			
		||||
		global.BlackCache.Set(key, 1, time.Second*time.Duration(openCaptchaTimeOut))
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var oc bool = openCaptcha == 0 || openCaptcha < interfaceToInt(v)
 | 
			
		||||
 | 
			
		||||
	if !oc || (l.CaptchaId != "" && l.Captcha != "" && store.Verify(l.CaptchaId, l.Captcha, true)) {
 | 
			
		||||
		u := &system.SysUser{Username: l.Username, Password: l.Password}
 | 
			
		||||
		user, err := userService.Login(u)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			global.GVA_LOG.Error("登陆失败! 用户名不存在或者密码错误!", zap.Error(err))
 | 
			
		||||
			// 验证码次数+1
 | 
			
		||||
			global.BlackCache.Increment(key, 1)
 | 
			
		||||
			response.FailWithMessage("用户名不存在或者密码错误", c)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		if user.Enable != 1 {
 | 
			
		||||
			global.GVA_LOG.Error("登陆失败! 用户被禁止登录!")
 | 
			
		||||
			// 验证码次数+1
 | 
			
		||||
			global.BlackCache.Increment(key, 1)
 | 
			
		||||
			response.FailWithMessage("用户被禁止登录", c)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		b.TokenNext(c, *user)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	// 验证码次数+1
 | 
			
		||||
	global.BlackCache.Increment(key, 1)
 | 
			
		||||
	response.FailWithMessage("验证码错误", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// TokenNext 登录以后签发jwt
 | 
			
		||||
func (b *BaseApi) TokenNext(c *gin.Context, user system.SysUser) {
 | 
			
		||||
	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: user.AuthorityId,
 | 
			
		||||
	})
 | 
			
		||||
	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 {
 | 
			
		||||
		response.OkWithDetailed(systemRes.LoginResponse{
 | 
			
		||||
			User:      user,
 | 
			
		||||
			Token:     token,
 | 
			
		||||
			ExpiresAt: claims.RegisteredClaims.ExpiresAt.Unix() * 1000,
 | 
			
		||||
		}, "登录成功", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if jwtStr, err := jwtService.GetRedisJWT(user.Username); err == redis.Nil {
 | 
			
		||||
		if err := jwtService.SetRedisJWT(token, user.Username); err != nil {
 | 
			
		||||
			global.GVA_LOG.Error("设置登录状态失败!", zap.Error(err))
 | 
			
		||||
			response.FailWithMessage("设置登录状态失败", c)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		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 := jwtService.SetRedisJWT(token, user.Username); err != nil {
 | 
			
		||||
			response.FailWithMessage("设置登录状态失败", c)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		response.OkWithDetailed(systemRes.LoginResponse{
 | 
			
		||||
			User:      user,
 | 
			
		||||
			Token:     token,
 | 
			
		||||
			ExpiresAt: claims.RegisteredClaims.ExpiresAt.Unix() * 1000,
 | 
			
		||||
		}, "登录成功", c)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Register
 | 
			
		||||
// @Tags     SysUser
 | 
			
		||||
// @Summary  用户注册账号
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param    data  body      systemReq.Register                                            true  "用户名, 昵称, 密码, 角色ID"
 | 
			
		||||
// @Success  200   {object}  response.Response{data=systemRes.SysUserResponse,msg=string}  "用户注册账号,返回包括用户信息"
 | 
			
		||||
// @Router   /user/admin_register [post]
 | 
			
		||||
func (b *BaseApi) Register(c *gin.Context) {
 | 
			
		||||
	var r systemReq.Register
 | 
			
		||||
	err := c.ShouldBindJSON(&r)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = utils.Verify(r, utils.RegisterVerify)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	var authorities []system.SysAuthority
 | 
			
		||||
	for _, v := range r.AuthorityIds {
 | 
			
		||||
		authorities = append(authorities, system.SysAuthority{
 | 
			
		||||
			AuthorityId: v,
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
	user := &system.SysUser{Username: r.Username, NickName: r.NickName, Password: r.Password, HeaderImg: r.HeaderImg, AuthorityId: r.AuthorityId, Authorities: authorities, Enable: r.Enable, Phone: r.Phone, Email: r.Email}
 | 
			
		||||
	userReturn, err := userService.Register(*user)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("注册失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithDetailed(systemRes.SysUserResponse{User: userReturn}, "注册失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithDetailed(systemRes.SysUserResponse{User: userReturn}, "注册成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ChangePassword
 | 
			
		||||
// @Tags      SysUser
 | 
			
		||||
// @Summary   用户修改密码
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @Produce  application/json
 | 
			
		||||
// @Param     data  body      systemReq.ChangePasswordReq    true  "用户名, 原密码, 新密码"
 | 
			
		||||
// @Success   200   {object}  response.Response{msg=string}  "用户修改密码"
 | 
			
		||||
// @Router    /user/changePassword [post]
 | 
			
		||||
func (b *BaseApi) ChangePassword(c *gin.Context) {
 | 
			
		||||
	var req systemReq.ChangePasswordReq
 | 
			
		||||
	err := c.ShouldBindJSON(&req)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = utils.Verify(req, utils.ChangePasswordVerify)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	uid := utils.GetUserID(c)
 | 
			
		||||
	u := &system.SysUser{GVA_MODEL: global.GVA_MODEL{ID: uid}, Password: req.Password}
 | 
			
		||||
	_, err = userService.ChangePassword(u, req.NewPassword)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("修改失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("修改失败,原密码与当前账户不符", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithMessage("修改成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetUserList
 | 
			
		||||
// @Tags      SysUser
 | 
			
		||||
// @Summary   分页获取用户列表
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      request.PageInfo                                        true  "页码, 每页大小"
 | 
			
		||||
// @Success   200   {object}  response.Response{data=response.PageResult,msg=string}  "分页获取用户列表,返回包括列表,总数,页码,每页数量"
 | 
			
		||||
// @Router    /user/getUserList [post]
 | 
			
		||||
func (b *BaseApi) GetUserList(c *gin.Context) {
 | 
			
		||||
	var pageInfo request.PageInfo
 | 
			
		||||
	err := c.ShouldBindJSON(&pageInfo)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = utils.Verify(pageInfo, utils.PageInfoVerify)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	list, total, err := userService.GetUserInfoList(pageInfo)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("获取失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("获取失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithDetailed(response.PageResult{
 | 
			
		||||
		List:     list,
 | 
			
		||||
		Total:    total,
 | 
			
		||||
		Page:     pageInfo.Page,
 | 
			
		||||
		PageSize: pageInfo.PageSize,
 | 
			
		||||
	}, "获取成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// SetUserAuthority
 | 
			
		||||
// @Tags      SysUser
 | 
			
		||||
// @Summary   更改用户权限
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      systemReq.SetUserAuth          true  "用户UUID, 角色ID"
 | 
			
		||||
// @Success   200   {object}  response.Response{msg=string}  "设置用户权限"
 | 
			
		||||
// @Router    /user/setUserAuthority [post]
 | 
			
		||||
func (b *BaseApi) SetUserAuthority(c *gin.Context) {
 | 
			
		||||
	var sua systemReq.SetUserAuth
 | 
			
		||||
	err := c.ShouldBindJSON(&sua)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	if UserVerifyErr := utils.Verify(sua, utils.SetUserAuthorityVerify); UserVerifyErr != nil {
 | 
			
		||||
		response.FailWithMessage(UserVerifyErr.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	userID := utils.GetUserID(c)
 | 
			
		||||
	err = userService.SetUserAuthority(userID, sua.AuthorityId)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("修改失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	claims := utils.GetUserInfo(c)
 | 
			
		||||
	j := &utils.JWT{SigningKey: []byte(global.GVA_CONFIG.JWT.SigningKey)} // 唯一签名
 | 
			
		||||
	claims.AuthorityId = sua.AuthorityId
 | 
			
		||||
	if token, err := j.CreateToken(*claims); err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("修改失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
	} else {
 | 
			
		||||
		c.Header("new-token", token)
 | 
			
		||||
		c.Header("new-expires-at", strconv.FormatInt(claims.ExpiresAt.Unix(), 10))
 | 
			
		||||
		response.OkWithMessage("修改成功", c)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// SetUserAuthorities
 | 
			
		||||
// @Tags      SysUser
 | 
			
		||||
// @Summary   设置用户权限
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      systemReq.SetUserAuthorities   true  "用户UUID, 角色ID"
 | 
			
		||||
// @Success   200   {object}  response.Response{msg=string}  "设置用户权限"
 | 
			
		||||
// @Router    /user/setUserAuthorities [post]
 | 
			
		||||
func (b *BaseApi) SetUserAuthorities(c *gin.Context) {
 | 
			
		||||
	var sua systemReq.SetUserAuthorities
 | 
			
		||||
	err := c.ShouldBindJSON(&sua)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = userService.SetUserAuthorities(sua.ID, sua.AuthorityIds)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("修改失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("修改失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithMessage("修改成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// DeleteUser
 | 
			
		||||
// @Tags      SysUser
 | 
			
		||||
// @Summary   删除用户
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      request.GetById                true  "用户ID"
 | 
			
		||||
// @Success   200   {object}  response.Response{msg=string}  "删除用户"
 | 
			
		||||
// @Router    /user/deleteUser [delete]
 | 
			
		||||
func (b *BaseApi) DeleteUser(c *gin.Context) {
 | 
			
		||||
	var reqId request.GetById
 | 
			
		||||
	err := c.ShouldBindJSON(&reqId)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = utils.Verify(reqId, utils.IdVerify)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	jwtId := utils.GetUserID(c)
 | 
			
		||||
	if jwtId == uint(reqId.ID) {
 | 
			
		||||
		response.FailWithMessage("删除失败, 自杀失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = userService.DeleteUser(reqId.ID)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("删除失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("删除失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithMessage("删除成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// SetUserInfo
 | 
			
		||||
// @Tags      SysUser
 | 
			
		||||
// @Summary   设置用户信息
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      system.SysUser                                             true  "ID, 用户名, 昵称, 头像链接"
 | 
			
		||||
// @Success   200   {object}  response.Response{data=map[string]interface{},msg=string}  "设置用户信息"
 | 
			
		||||
// @Router    /user/setUserInfo [put]
 | 
			
		||||
func (b *BaseApi) SetUserInfo(c *gin.Context) {
 | 
			
		||||
	var user systemReq.ChangeUserInfo
 | 
			
		||||
	err := c.ShouldBindJSON(&user)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = utils.Verify(user, utils.IdVerify)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if len(user.AuthorityIds) != 0 {
 | 
			
		||||
		err = userService.SetUserAuthorities(user.ID, user.AuthorityIds)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			global.GVA_LOG.Error("设置失败!", zap.Error(err))
 | 
			
		||||
			response.FailWithMessage("设置失败", c)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	err = userService.SetUserInfo(system.SysUser{
 | 
			
		||||
		GVA_MODEL: global.GVA_MODEL{
 | 
			
		||||
			ID: user.ID,
 | 
			
		||||
		},
 | 
			
		||||
		NickName:  user.NickName,
 | 
			
		||||
		HeaderImg: user.HeaderImg,
 | 
			
		||||
		Phone:     user.Phone,
 | 
			
		||||
		Email:     user.Email,
 | 
			
		||||
		SideMode:  user.SideMode,
 | 
			
		||||
		Enable:    user.Enable,
 | 
			
		||||
	})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("设置失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("设置失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithMessage("设置成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// SetSelfInfo
 | 
			
		||||
// @Tags      SysUser
 | 
			
		||||
// @Summary   设置用户信息
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Param     data  body      system.SysUser                                             true  "ID, 用户名, 昵称, 头像链接"
 | 
			
		||||
// @Success   200   {object}  response.Response{data=map[string]interface{},msg=string}  "设置用户信息"
 | 
			
		||||
// @Router    /user/SetSelfInfo [put]
 | 
			
		||||
func (b *BaseApi) SetSelfInfo(c *gin.Context) {
 | 
			
		||||
	var user systemReq.ChangeUserInfo
 | 
			
		||||
	err := c.ShouldBindJSON(&user)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	user.ID = utils.GetUserID(c)
 | 
			
		||||
	err = userService.SetSelfInfo(system.SysUser{
 | 
			
		||||
		GVA_MODEL: global.GVA_MODEL{
 | 
			
		||||
			ID: user.ID,
 | 
			
		||||
		},
 | 
			
		||||
		NickName:  user.NickName,
 | 
			
		||||
		HeaderImg: user.HeaderImg,
 | 
			
		||||
		Phone:     user.Phone,
 | 
			
		||||
		Email:     user.Email,
 | 
			
		||||
		SideMode:  user.SideMode,
 | 
			
		||||
		Enable:    user.Enable,
 | 
			
		||||
	})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("设置失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("设置失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithMessage("设置成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetUserInfo
 | 
			
		||||
// @Tags      SysUser
 | 
			
		||||
// @Summary   获取用户信息
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @accept    application/json
 | 
			
		||||
// @Produce   application/json
 | 
			
		||||
// @Success   200  {object}  response.Response{data=map[string]interface{},msg=string}  "获取用户信息"
 | 
			
		||||
// @Router    /user/getUserInfo [get]
 | 
			
		||||
func (b *BaseApi) GetUserInfo(c *gin.Context) {
 | 
			
		||||
	uuid := utils.GetUserUuid(c)
 | 
			
		||||
	ReqUser, err := userService.GetUserInfo(uuid)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("获取失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("获取失败", c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithDetailed(gin.H{"userInfo": ReqUser}, "获取成功", c)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ResetPassword
 | 
			
		||||
// @Tags      SysUser
 | 
			
		||||
// @Summary   重置用户密码
 | 
			
		||||
// @Security  ApiKeyAuth
 | 
			
		||||
// @Produce  application/json
 | 
			
		||||
// @Param     data  body      system.SysUser                 true  "ID"
 | 
			
		||||
// @Success   200   {object}  response.Response{msg=string}  "重置用户密码"
 | 
			
		||||
// @Router    /user/resetPassword [post]
 | 
			
		||||
func (b *BaseApi) ResetPassword(c *gin.Context) {
 | 
			
		||||
	var user system.SysUser
 | 
			
		||||
	err := c.ShouldBindJSON(&user)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		response.FailWithMessage(err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	err = userService.ResetPassword(user.ID)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		global.GVA_LOG.Error("重置失败!", zap.Error(err))
 | 
			
		||||
		response.FailWithMessage("重置失败"+err.Error(), c)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	response.OkWithMessage("重置成功", c)
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user