完善生成模版,调整目录

This commit is contained in:
xh
2025-06-25 01:31:34 +08:00
parent cf4e879fe2
commit 915bcfe22c
35 changed files with 57 additions and 67 deletions

View File

@@ -0,0 +1,108 @@
package commonController
import (
"x_admin/core/request"
"x_admin/core/response"
"x_admin/middleware"
"x_admin/schema/commonSchema"
"x_admin/service/commonService"
"x_admin/util"
"github.com/gin-gonic/gin"
)
func AlbumRoute(rg *gin.RouterGroup) {
handle := albumHandler{}
rg = rg.Group("/common", middleware.TokenAuth())
rg.GET("/album/albumList", handle.albumList)
rg.POST("/album/albumRename", middleware.RecordLog("相册文件重命名"), handle.albumRename)
rg.POST("/album/albumMove", middleware.RecordLog("相册文件移动"), handle.albumMove)
rg.POST("/album/albumDel", middleware.RecordLog("相册文件删除"), handle.albumDel)
rg.GET("/album/cateList", handle.cateList)
rg.POST("/album/cateAdd", middleware.RecordLog("相册分类新增"), handle.cateAdd)
rg.POST("/album/cateRename", middleware.RecordLog("相册分类重命名"), handle.cateRename)
rg.POST("/album/cateDel", middleware.RecordLog("相册分类删除"), handle.cateDel)
}
type albumHandler struct{}
// albumList 相册文件列表
func (ah albumHandler) albumList(c *gin.Context) {
var page request.PageReq
var listReq commonSchema.CommonAlbumListReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &page)) {
return
}
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &listReq)) {
return
}
res, err := commonService.AlbumService.AlbumList(page, listReq)
response.CheckAndRespWithData(c, res, err)
}
// albumRename 相册文件重命名
func (ah albumHandler) albumRename(c *gin.Context) {
var rnReq commonSchema.CommonAlbumRenameReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &rnReq)) {
return
}
response.CheckAndResp(c, commonService.AlbumService.AlbumRename(rnReq.ID, rnReq.Name))
}
// albumMove 相册文件移动
func (ah albumHandler) albumMove(c *gin.Context) {
var mvReq commonSchema.CommonAlbumMoveReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &mvReq)) {
return
}
response.CheckAndResp(c, commonService.AlbumService.AlbumMove(mvReq.Ids, mvReq.Cid))
}
// albumDel 相册文件删除
func (ah albumHandler) albumDel(c *gin.Context) {
var delReq commonSchema.CommonAlbumDelReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &delReq)) {
return
}
response.CheckAndResp(c, commonService.AlbumService.AlbumDel(delReq.Ids))
}
// cateList 类目列表
func (ah albumHandler) cateList(c *gin.Context) {
var listReq commonSchema.CommonCateListReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &listReq)) {
return
}
res, err := commonService.AlbumService.CateList(listReq)
response.CheckAndRespWithData(c, res, err)
}
// cateAdd 类目新增
func (ah albumHandler) cateAdd(c *gin.Context) {
var addReq commonSchema.CommonCateAddReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &addReq)) {
return
}
response.CheckAndResp(c, commonService.AlbumService.CateAdd(addReq))
}
// cateRename 类目命名
func (ah albumHandler) cateRename(c *gin.Context) {
var rnReq commonSchema.CommonCateRenameReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &rnReq)) {
return
}
response.CheckAndResp(c, commonService.AlbumService.CateRename(rnReq.ID, rnReq.Name))
}
// cateDel 类目删除
func (ah albumHandler) cateDel(c *gin.Context) {
var delReq commonSchema.CommonCateDelReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &delReq)) {
return
}
response.CheckAndResp(c, commonService.AlbumService.CateDel(delReq.ID))
}

View File

@@ -0,0 +1,71 @@
package commonController
import (
"errors"
"x_admin/schema/commonSchema"
"x_admin/service/commonService"
"github.com/gin-gonic/gin"
)
func CaptchaRoute(rg *gin.RouterGroup) {
rg = rg.Group("/common/captcha")
rg.POST("/get", func(c *gin.Context) {
var captchaGet commonSchema.CaptchaGetParams
if err := c.ShouldBind(&captchaGet); err != nil {
// 返回错误信息
c.JSON(200, errorRes(err))
return
}
if captchaGet.CaptchaType == "" {
c.JSON(200, errorRes(errors.New("验证码类型不能为空")))
return
}
// 根据参数类型获取不同服务即可
data, err := commonService.CaptchaGet(captchaGet.CaptchaType)
if err != nil {
c.JSON(200, errorRes(err))
return
}
//输出json结果给调用方
c.JSON(200, successRes(data))
})
rg.POST("/check", func(c *gin.Context) {
var params commonSchema.ClientParams
if err := c.ShouldBind(&params); err != nil {
// 返回错误信息
c.JSON(200, errorRes(err))
return
}
err := commonService.CaptchaCheck(params)
if err != nil {
c.JSON(200, errorRes(err))
return
}
//输出json结果给调用方
c.JSON(200, successRes(nil))
})
}
func successRes(data interface{}) map[string]interface{} {
ret := make(map[string]interface{})
ret["error"] = false
ret["repCode"] = "0000"
ret["repData"] = data
ret["repMsg"] = nil
ret["successRes"] = true
return ret
}
func errorRes(err error) map[string]interface{} {
ret := make(map[string]interface{})
ret["error"] = true
ret["repCode"] = "0001"
ret["repData"] = nil
ret["repMsg"] = err.Error()
ret["successRes"] = false
return ret
}

View File

@@ -0,0 +1,32 @@
package commonController
import (
"x_admin/core/response"
"x_admin/middleware"
"x_admin/service/commonService"
"github.com/gin-gonic/gin"
)
func IndexRoute(rg *gin.RouterGroup) {
handle := indexHandler{}
rg = rg.Group("/common", middleware.TokenAuth())
rg.GET("/index/console", handle.console)
rg.GET("/index/config", handle.config)
}
type indexHandler struct{}
// console 控制台
func (ih indexHandler) console(c *gin.Context) {
res, err := commonService.IndexService.Console()
response.CheckAndRespWithData(c, res, err)
}
// config 公共配置
func (ih indexHandler) config(c *gin.Context) {
res, err := commonService.IndexService.Config()
response.CheckAndRespWithData(c, res, err)
}

View File

@@ -0,0 +1,50 @@
package commonController
import (
"x_admin/config"
"x_admin/core/response"
"x_admin/middleware"
"x_admin/schema/commonSchema"
"x_admin/service/commonService"
"x_admin/util"
"github.com/gin-gonic/gin"
)
func UploadRoute(rg *gin.RouterGroup) {
handle := uploadHandler{}
rg = rg.Group("/common", middleware.TokenAuth())
rg.POST("/upload/image", middleware.RecordLog("上传图片", middleware.RequestFile), handle.uploadImage)
rg.POST("/upload/video", middleware.RecordLog("上传视频", middleware.RequestFile), handle.uploadVideo)
}
type uploadHandler struct{}
// uploadImage 上传图片
func (uh uploadHandler) uploadImage(c *gin.Context) {
var uReq commonSchema.CommonUploadImageReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyBody(c, &uReq)) {
return
}
file, ve := util.VerifyUtil.VerifyFile(c, "file")
if response.IsFailWithResp(c, ve) {
return
}
res, err := commonService.UploadService.UploadImage(file, uReq.Cid, config.AdminConfig.GetAdminId(c))
response.CheckAndRespWithData(c, res, err)
}
// uploadVideo 上传视频
func (uh uploadHandler) uploadVideo(c *gin.Context) {
var uReq commonSchema.CommonUploadImageReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyBody(c, &uReq)) {
return
}
file, ve := util.VerifyUtil.VerifyFile(c, "file")
if response.IsFailWithResp(c, ve) {
return
}
res, err := commonService.UploadService.UploadVideo(file, uReq.Cid, config.AdminConfig.GetAdminId(c))
response.CheckAndRespWithData(c, res, err)
}

View File

@@ -0,0 +1,129 @@
package flowController
import (
"x_admin/config"
"x_admin/core/request"
"x_admin/core/response"
. "x_admin/schema/flowSchema"
"x_admin/service/flowService"
"x_admin/util"
"github.com/gin-gonic/gin"
)
type FlowApplyHandler struct{}
// @Summary 申请流程列表
// @Tags flow_apply-申请流程
// @Produce json
// @Param Token header string true "token"
// @Param PageNo query int true "页码"
// @Param PageSize query int true "每页数量"
// @Param templateId query int false "模板"
// @Param applyUserId query int false "申请人id"
// @Param applyUserNickname query string false "申请人昵称"
// @Param flowName query string false "流程名称"
// @Param flowGroup query int false "流程分类"
// @Param flowRemark query string false "流程描述"
// @Param flowFormData query string false "表单配置"
// @Param flowProcessData query string false "流程配置"
// @Param status query int false "状态1待提交2审批中3审批完成4审批失败"
// @Success 200 {object} response.Response{data=response.PageResp{lists=[]FlowApplyResp}} "成功"
// @Router /api/admin/flow/flow_apply/list [get]
func (hd FlowApplyHandler) List(c *gin.Context) {
var page request.PageReq
var listReq FlowApplyListReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &page)) {
return
}
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &listReq)) {
return
}
res, err := flowService.ApplyService.List(page, listReq)
response.CheckAndRespWithData(c, res, err)
}
// @Summary 申请流程详情
// @Tags flow_apply-申请流程
// @Produce json
// @Param Token header string true "token"
// @Param id query int false "申请id"
// @Success 200 {object} response.Response{data=FlowApplyResp} "成功"
// @Router /api/admin/flow/flow_apply/detail [get]
func (hd FlowApplyHandler) Detail(c *gin.Context) {
var detailReq FlowApplyDetailReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &detailReq)) {
return
}
res, err := flowService.ApplyService.Detail(detailReq.Id)
response.CheckAndRespWithData(c, res, err)
}
// @Summary 申请流程新增
// @Tags flow_apply-申请流程
// @Produce json
// @Param Token header string true "token"
// @Param templateId body int false "模板"
// @Param applyUserId body int false "申请人id"
// @Param applyUserNickname body string false "申请人昵称"
// @Param flowName body string false "流程名称"
// @Param flowGroup body int false "流程分类"
// @Param flowRemark body string false "流程描述"
// @Param flowFormData body string false "表单配置"
// @Param flowProcessData body string false "流程配置"
// @Param status body int false "状态1待提交2审批中3审批完成4审批失败"
// @Success 200 {object} response.Response "成功"
// @Router /api/admin/flow/flow_apply/add [post]
func (hd FlowApplyHandler) Add(c *gin.Context) {
var addReq FlowApplyAddReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyBody(c, &addReq)) {
return
}
var Nickname = config.AdminConfig.GetNickname(c)
var AdminId = config.AdminConfig.GetAdminId(c)
addReq.ApplyUserNickname = Nickname
addReq.ApplyUserId = int(AdminId)
addReq.Status = 1
response.CheckAndResp(c, flowService.ApplyService.Add(addReq))
}
// @Summary 申请流程编辑
// @Tags flow_apply-申请流程
// @Produce json
// @Param Token header string true "token"
// @Param id body int false "申请id"
// @Param templateId body int false "模板"
// @Param applyUserId body int false "申请人id"
// @Param applyUserNickname body string false "申请人昵称"
// @Param flowName body string false "流程名称"
// @Param flowGroup body int false "流程分类"
// @Param flowRemark body string false "流程描述"
// @Param flowFormData body string false "表单配置"
// @Param flowProcessData body string false "流程配置"
// @Param status body int false "状态1待提交2审批中3审批完成4审批失败"
// @Success 200 {object} response.Response "成功"
// @Router /api/admin/flow/flow_apply/edit [post]
func (hd FlowApplyHandler) Edit(c *gin.Context) {
var editReq FlowApplyEditReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyBody(c, &editReq)) {
return
}
response.CheckAndResp(c, flowService.ApplyService.Edit(editReq))
}
// @Summary 申请流程删除
// @Tags flow_apply-申请流程
// @Produce json
// @Param Token header string true "token"
// @Param id body int false "申请id"
// @Success 200 {object} response.Response "成功"
// @Router /api/admin/flow/flow_apply/del [post]
func (hd FlowApplyHandler) Del(c *gin.Context) {
var delReq FlowApplyDelReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyBody(c, &delReq)) {
return
}
response.CheckAndResp(c, flowService.ApplyService.Del(delReq.Id))
}

View File

@@ -0,0 +1,197 @@
package flowController
import (
"fmt"
"x_admin/core/request"
"x_admin/core/response"
. "x_admin/schema/flowSchema"
"x_admin/service/flowService"
"x_admin/util"
"github.com/gin-gonic/gin"
)
type FlowHistoryHandler struct {
}
// @Summary 流程历史列表
// @Tags flow_history-流程历史
// @Produce json
// @Param Token header string true "token"
// @Param PageNo query int true "页码"
// @Param PageSize query int true "每页数量"
// @Param applyId query int false "申请id"
// @Param templateId query int false "模板id"
// @Param applyUserId query int false "申请人id"
// @Param applyUserNickname query string false "申请人昵称"
// @Param approverId query int false "审批人id"
// @Param approverNickname query string false "审批用户昵称"
// @Param nodeId query string false "节点"
// @Param formValue query string false "表单值"
// @Param passStatus query int false "通过状态0待处理1通过2拒绝"
// @Param passRemark query string false "通过备注"
// @Success 200 {object} response.Response{data=response.PageResp{lists=[]FlowHistoryResp}} "成功"
// @Router /api/admin/flow/flow_history/list [get]
func (hd FlowHistoryHandler) List(c *gin.Context) {
var page request.PageReq
var listReq = FlowHistoryListReq{
PassStatus: -9999,
}
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &page)) {
return
}
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &listReq)) {
return
}
res, err := flowService.HistoryService.List(page, listReq)
response.CheckAndRespWithData(c, res, err)
}
// @Summary 流程历史列表-所有
// @Tags flow_history-流程历史
// @Produce json
// @Success 200 {object} response.Response{data=FlowHistoryResp} "成功"
// @Router /api/admin/flow/flow_history/listAll [get]
func (hd FlowHistoryHandler) ListAll(c *gin.Context) {
var listReq FlowHistoryListReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &listReq)) {
return
}
res, err := flowService.HistoryService.ListAll(listReq)
response.CheckAndRespWithData(c, res, err)
}
// @Summary 流程历史详情
// @Tags flow_history-流程历史
// @Produce json
// @Param Token header string true "token"
// @Param id query int false "历史id"
// @Success 200 {object} response.Response{data=FlowHistoryResp} "成功"
// @Router /api/admin/flow/flow_history/detail [get]
func (hd FlowHistoryHandler) Detail(c *gin.Context) {
var detailReq FlowHistoryDetailReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &detailReq)) {
return
}
res, err := flowService.HistoryService.Detail(detailReq.Id)
response.CheckAndRespWithData(c, res, err)
}
// @Summary 流程历史新增
// @Tags flow_history-流程历史
// @Produce json
// @Param Token header string true "token"
// @Param applyId body int false "申请id"
// @Param templateId body int false "模板id"
// @Param applyUserId body int false "申请人id"
// @Param applyUserNickname body string false "申请人昵称"
// @Param approverId body int false "审批人id"
// @Param approverNickname body string false "审批用户昵称"
// @Param nodeId body string false "节点"
// @Param formValue body string false "表单值"
// @Param passStatus body int false "通过状态0待处理1通过2拒绝"
// @Param passRemark body string false "通过备注"
// @Success 200 {object} response.Response "成功"
// @Router /api/admin/flow/flow_history/add [post]
func (hd FlowHistoryHandler) Add(c *gin.Context) {
var addReq FlowHistoryAddReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyBody(c, &addReq)) {
return
}
response.CheckAndResp(c, flowService.HistoryService.Add(addReq))
}
// @Summary 流程历史编辑
// @Tags flow_history-流程历史
// @Produce json
// @Param Token header string true "token"
// @Param id body int false "历史id"
// @Param applyId body int false "申请id"
// @Param templateId body int false "模板id"
// @Param applyUserId body int false "申请人id"
// @Param applyUserNickname body string false "申请人昵称"
// @Param approverId body int false "审批人id"
// @Param approverNickname body string false "审批用户昵称"
// @Param nodeId body string false "节点"
// @Param formValue body string false "表单值"
// @Param passStatus body int false "通过状态0待处理1通过2拒绝"
// @Param passRemark body string false "通过备注"
// @Success 200 {object} response.Response "成功"
// @Router /api/admin/flow/flow_history/edit [post]
func (hd FlowHistoryHandler) Edit(c *gin.Context) {
var editReq FlowHistoryEditReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyBody(c, &editReq)) {
return
}
response.CheckAndResp(c, flowService.HistoryService.Edit(editReq))
}
// @Summary 流程历史删除
// @Tags flow_history-流程历史
// @Produce json
// @Param Token header string true "token"
// @Param id body int false "历史id"
// @Success 200 {object} response.Response "成功"
// @Router /api/admin/flow/flow_history/del [post]
func (hd FlowHistoryHandler) Del(c *gin.Context) {
var delReq FlowHistoryDelReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyBody(c, &delReq)) {
return
}
response.CheckAndResp(c, flowService.HistoryService.Del(delReq.Id))
}
// 提交申请,通过审批
//
// @Tags flow_history-流程历史
//
// @Router /api/admin/flow/flow_apply/pass [post]
func (hd FlowHistoryHandler) Pass(c *gin.Context) {
var pass PassReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyBody(c, &pass)) {
return
}
err := flowService.HistoryService.Pass(pass)
response.CheckAndResp(c, err)
}
// 拒绝审批
//
// @Tags flow_history-流程历史
//
// @Router /api/admin/flow/flow_apply/back [post]
func (hd FlowHistoryHandler) Back(c *gin.Context) {
var back BackReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyBody(c, &back)) {
return
}
err := flowService.HistoryService.Back(back)
fmt.Println(err)
response.CheckAndResp(c, err)
}
// 获取下一个审批节点,中间可能存在系统任务节点和网关
func (hd FlowHistoryHandler) NextNode(c *gin.Context) {
var nextNode NextNodeReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyBody(c, &nextNode)) {
return
}
res, _, _, err := flowService.HistoryService.GetNextNode(nextNode.ApplyId)
response.CheckAndRespWithData(c, res, err)
}
// 获取节点的可审批用户
func (hd FlowHistoryHandler) GetApprover(c *gin.Context) {
var nextNode NextNodeReq
// var node FlowTree
if response.IsFailWithResp(c, util.VerifyUtil.VerifyBody(c, &nextNode)) {
return
}
res, err := flowService.HistoryService.GetApprover(nextNode.ApplyId)
if err != nil {
response.FailWithMsg(c, response.Failed, err.Error())
return
}
response.OkWithData(c, res)
}

View File

@@ -0,0 +1,118 @@
package flowController
import (
"x_admin/core/request"
"x_admin/core/response"
. "x_admin/schema/flowSchema"
"x_admin/service/flowService"
"x_admin/util"
"github.com/gin-gonic/gin"
)
type FlowTemplateHandler struct {
}
// @Summary 流程模板列表
// @Tags flow_template-流程模板
// @Produce json
// @Param Token header string true "token"
// @Param PageNo query int true "页码"
// @Param PageSize query int true "每页数量"
// @Param flowName query string false "流程名称"
// @Param flowGroup query int false "流程分类"
// @Param flowRemark query string false "流程描述"
// @Param flowFormData query string false "表单配置"
// @Param flowProcessData query string false "流程配置"
// @Success 200 {object} response.Response{data=response.PageResp{lists=[]FlowTemplateResp}} "成功"
// @Router /api/admin/flow/flow_template/list [get]
func (hd FlowTemplateHandler) List(c *gin.Context) {
var page request.PageReq
var listReq FlowTemplateListReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &page)) {
return
}
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &listReq)) {
return
}
res, err := flowService.TemplateService.List(page, listReq)
response.CheckAndRespWithData(c, res, err)
}
// @Summary 流程模板列表-所有
// @Tags flow_template-流程模板
// @Router /api/admin/flow/flow_template/listAll [get]
func (hd FlowTemplateHandler) ListAll(c *gin.Context) {
res, err := flowService.TemplateService.ListAll()
response.CheckAndRespWithData(c, res, err)
}
// @Summary 流程模板详情
// @Tags flow_template-流程模板
// @Produce json
// @Param Token header string true "token"
// @Param id query int false "历史id"
// @Success 200 {object} FlowTemplateResp "成功"
// @Router /api/admin/flow/flow_template/detail [get]
func (hd FlowTemplateHandler) Detail(c *gin.Context) {
var detailReq FlowTemplateDetailReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &detailReq)) {
return
}
res, err := flowService.TemplateService.Detail(detailReq.Id)
response.CheckAndRespWithData(c, res, err)
}
// @Summary 流程模板新增
// @Tags flow_template-流程模板
// @Produce json
// @Param Token header string true "token"
// @Param flowName body string false "流程名称"
// @Param flowGroup body int false "流程分类"
// @Param flowRemark body string false "流程描述"
// @Param flowFormData body string false "表单配置"
// @Param flowProcessData body string false "流程配置"
// @Success 200 {object} response.Response "成功"
// @Router /api/admin/flow/flow_template/add [post]
func (hd FlowTemplateHandler) Add(c *gin.Context) {
var addReq FlowTemplateAddReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyBody(c, &addReq)) {
return
}
response.CheckAndResp(c, flowService.TemplateService.Add(addReq))
}
// @Summary 流程模板编辑
// @Tags flow_template-流程模板
// @Produce json
// @Param Token header string true "token"
// @Param id body int false "."
// @Param flowName body string false "流程名称"
// @Param flowGroup body int false "流程分类"
// @Param flowRemark body string false "流程描述"
// @Param flowFormData body string false "表单配置"
// @Param flowProcessData body string false "流程配置"
// @Success 200 {object} response.Response "成功"
// @Router /api/admin/flow/flow_template/edit [post]
func (hd FlowTemplateHandler) Edit(c *gin.Context) {
var editReq FlowTemplateEditReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyBody(c, &editReq)) {
return
}
response.CheckAndResp(c, flowService.TemplateService.Edit(editReq))
}
// @Summary 流程模板删除
// @Tags flow_template-流程模板
// @Produce json
// @Param Token header string true "token"
// @Param id body int false "历史id"
// @Success 200 {object} response.Response "成功"
// @Router /api/admin/flow/flow_template/del [post]
func (hd FlowTemplateHandler) Del(c *gin.Context) {
var delReq FlowTemplateDelReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyBody(c, &delReq)) {
return
}
response.CheckAndResp(c, flowService.TemplateService.Del(delReq.Id))
}

View File

@@ -0,0 +1,138 @@
package generatorController
import (
"x_admin/core/request"
"x_admin/core/response"
"x_admin/schema/generatorSchema"
"x_admin/service/generatorService"
"net/http"
"strings"
"x_admin/middleware"
"x_admin/util"
"github.com/gin-gonic/gin"
)
func GenRoute(rg *gin.RouterGroup) {
handle := genHandler{}
rg = rg.Group("/gen", middleware.TokenAuth())
rg.GET("/db", handle.dbTables)
rg.GET("/list", handle.List)
rg.GET("/detail", handle.Detail)
rg.POST("/importTable", handle.importTable)
rg.POST("/syncTable", handle.syncTable)
rg.POST("/editTable", handle.editTable)
rg.POST("/delTable", handle.delTable)
rg.GET("/previewCode", handle.previewCode)
rg.GET("/downloadCode", handle.downloadCode)
}
type genHandler struct {
// Service IGenerateService
}
// dbTables 数据表列表
func (gh genHandler) dbTables(c *gin.Context) {
var page request.PageReq
var tbReq generatorSchema.DbTablesReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &page)) {
return
}
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &tbReq)) {
return
}
res, err := generatorService.GenerateService.DbTables(page, tbReq)
response.CheckAndRespWithData(c, res, err)
}
// list 生成列表
func (gh genHandler) List(c *gin.Context) {
var page request.PageReq
var listReq generatorSchema.ListTableReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &page)) {
return
}
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &listReq)) {
return
}
res, err := generatorService.GenerateService.List(page, listReq)
response.CheckAndRespWithData(c, res, err)
}
// detail 生成详情
func (gh genHandler) Detail(c *gin.Context) {
var detailReq generatorSchema.DetailTableReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &detailReq)) {
return
}
res, err := generatorService.GenerateService.Detail(detailReq.ID)
response.CheckAndRespWithData(c, res, err)
}
// importTable 导入表结构
func (gh genHandler) importTable(c *gin.Context) {
var importReq generatorSchema.ImportTableReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &importReq)) {
return
}
err := generatorService.GenerateService.ImportTable(strings.Split(importReq.Tables, ","))
response.CheckAndResp(c, err)
}
// syncTable 同步表结构
func (gh genHandler) syncTable(c *gin.Context) {
var syncReq generatorSchema.SyncTableReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &syncReq)) {
return
}
err := generatorService.GenerateService.SyncTable(syncReq.ID)
response.CheckAndResp(c, err)
}
// editTable 编辑表结构
func (gh genHandler) editTable(c *gin.Context) {
var editReq generatorSchema.EditTableReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &editReq)) {
return
}
err := generatorService.GenerateService.EditTable(editReq)
response.CheckAndResp(c, err)
}
// delTable 删除表结构
func (gh genHandler) delTable(c *gin.Context) {
var delReq generatorSchema.DelTableReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &delReq)) {
return
}
err := generatorService.GenerateService.DelTable(delReq.Ids)
response.CheckAndResp(c, err)
}
// previewCode 预览代码
func (gh genHandler) previewCode(c *gin.Context) {
var previewReq generatorSchema.PreviewCodeReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &previewReq)) {
return
}
res, err := generatorService.GenerateService.PreviewCode(previewReq.ID)
response.CheckAndRespWithData(c, res, err)
}
// downloadCode 下载代码
func (gh genHandler) downloadCode(c *gin.Context) {
var downloadReq generatorSchema.DownloadReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &downloadReq)) {
return
}
zipBytes, err := generatorService.GenerateService.DownloadCode(strings.Split(downloadReq.Tables, ","))
if response.IsFailWithResp(c, err) {
return
}
contentType := "application/zip"
c.Header("Content-Type", contentType)
c.Header("Content-Disposition", "attachment; filename=gen-"+downloadReq.Tables+".zip")
c.Data(http.StatusOK, contentType, zipBytes)
}

View File

@@ -0,0 +1,48 @@
package monitorController
import (
"strings"
"x_admin/core/response"
"x_admin/middleware"
"x_admin/util"
"github.com/gin-gonic/gin"
)
func RegisterRoute(rg *gin.RouterGroup) {
handle := monitorHandler{}
rg = rg.Group("/monitor", middleware.TokenAuth())
rg.GET("/cache", middleware.RecordLog("缓存监控"), handle.cache)
rg.GET("/server", middleware.RecordLog("服务监控"), handle.server)
}
type monitorHandler struct{}
// cache 缓存监控
func (mh monitorHandler) cache(c *gin.Context) {
cmdStatsMap := util.RedisUtil.Info("commandstats")
var stats []map[string]string
for k, v := range cmdStatsMap {
stats = append(stats, map[string]string{
"name": strings.Split(k, "_")[1],
"value": v[strings.Index(v, "=")+1 : strings.Index(v, ",")],
})
}
response.OkWithData(c, map[string]interface{}{
"info": util.RedisUtil.Info(),
"commandStats": stats,
"dbSize": util.RedisUtil.DBSize(),
})
}
// server 服务监控
func (mh monitorHandler) server(c *gin.Context) {
response.OkWithData(c, map[string]interface{}{
"cpu": util.ServerUtil.GetCpuInfo(),
"mem": util.ServerUtil.GetMemInfo(),
"sys": util.ServerUtil.GetSysInfo(),
"disk": util.ServerUtil.GetDiskInfo(),
"go": util.ServerUtil.GetGoInfo(),
})
}

View File

@@ -0,0 +1,288 @@
package monitorController
import (
"encoding/json"
"fmt"
"net/http"
"net/url"
"strconv"
"strings"
"time"
"x_admin/core"
"x_admin/core/request"
"x_admin/core/response"
. "x_admin/schema/monitorSchema"
"x_admin/service/monitorService"
"x_admin/util"
"x_admin/util/excel2"
"x_admin/util/img_util"
"github.com/gin-gonic/gin"
"golang.org/x/sync/singleflight"
)
type MonitorClientHandler struct {
requestGroup singleflight.Group
}
// @Summary 监控-客户端信息列表
// @Tags monitor_client-监控-客户端信息
// @Produce json
// @Param Token header string true "token"
// @Param PageNo query int true "页码"
// @Param PageSize query int true "每页数量"
// @Param ProjectKey query string false "项目key"
// @Param ClientId query string false "sdk生成的客户端id"
// @Param UserId query string false "用户id"
// @Param Os query string false "系统"
// @Param Browser query string false "浏览器"
// @Param Country query string false "国家"
// @Param Province query string false "省份"
// @Param City query string false "城市"
// @Param Operator query string false "电信运营商"
// @Param Ip query string false "ip"
// @Param Width query number false "屏幕"
// @Param Height query number false "屏幕高度"
// @Param Ua query string false "ua记录"
// @Param CreateTimeStart query string false "创建时间"
// @Param CreateTimeEnd query string false "创建时间"
//
// @Success 200 {object} response.Response{ data=response.PageResp{ lists=[]MonitorClientResp}} "成功"
// @Router /api/admin/monitor_client/list [get]
func (hd *MonitorClientHandler) List(c *gin.Context) {
var page request.PageReq
var listReq MonitorClientListReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &page)) {
return
}
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &listReq)) {
return
}
res, err := monitorService.MonitorClientService.List(page, listReq)
response.CheckAndRespWithData(c, res, err)
}
// @Summary 监控-客户端信息列表-所有
// @Tags monitor_client-监控-客户端信息
// @Produce json
// @Param ProjectKey query string false "项目key"
// @Param ClientId query string false "sdk生成的客户端id"
// @Param UserId query string false "用户id"
// @Param Os query string false "系统"
// @Param Browser query string false "浏览器"
// @Param Country query string false "国家"
// @Param Province query string false "省份"
// @Param City query string false "城市"
// @Param Operator query string false "电信运营商"
// @Param Ip query string false "ip"
// @Param Width query number false "屏幕"
// @Param Height query number false "屏幕高度"
// @Param Ua query string false "ua记录"
// @Param CreateTimeStart query string false "创建时间"
// @Param CreateTimeEnd query string false "创建时间"
// @Success 200 {object} response.Response{ data=[]MonitorClientResp} "成功"
// @Router /api/admin/monitor_client/listAll [get]
func (hd *MonitorClientHandler) ListAll(c *gin.Context) {
var listReq MonitorClientListReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &listReq)) {
return
}
res, err := monitorService.MonitorClientService.ListAll(listReq)
response.CheckAndRespWithData(c, res, err)
}
func (hd *MonitorClientHandler) ErrorUsers(c *gin.Context) {
var Req MonitorClientDetailReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &Req)) {
return
}
res, err := monitorService.MonitorClientService.ErrorUsers(Req.Id)
response.CheckAndRespWithData(c, res, err)
}
// @Summary 监控-客户端信息详情
// @Tags monitor_client-监控-客户端信息
// @Produce json
// @Param Token header string true "token"
// @Param Id query number false "uuid"
// @Success 200 {object} response.Response{ data=MonitorClientResp} "成功"
// @Router /api/admin/monitor_client/detail [get]
func (hd *MonitorClientHandler) Detail(c *gin.Context) {
var detailReq MonitorClientDetailReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &detailReq)) {
return
}
res, err, _ := hd.requestGroup.Do("MonitorClient:Detail:"+strconv.Itoa(detailReq.Id), func() (any, error) {
v, err := monitorService.MonitorClientService.Detail(detailReq.Id)
return v, err
})
response.CheckAndRespWithData(c, res, err)
}
// @Summary 监控-客户端信息新增
// @Tags monitor_client-监控-客户端信息
// @Produce json
// @Param Token header string true "token"
// @Param ProjectKey body string false "项目key"
// @Param ClientId body string false "sdk生成的客户端id"
// @Param UserId body string false "用户id"
// @Param Os body string false "系统"
// @Param Browser body string false "浏览器"
// @Param Country query string false "国家"
// @Param Province query string false "省份"
// @Param City query string false "城市"
// @Param Operator query string false "电信运营商"
// @Param Ip query string false "ip"
// @Param Width body number false "屏幕"
// @Param Height body number false "屏幕高度"
// @Param Ua body string false "ua记录"
// @Success 200 {object} response.Response "成功"
// @Router /api/admin/monitor_client/add [post]
func (hd *MonitorClientHandler) Add(c *gin.Context) {
data, err := url.QueryUnescape(c.Query("data"))
if err != nil {
c.Data(200, "image/gif", img_util.EmptyGif())
return
}
var addReq MonitorClientAddReq
json.Unmarshal([]byte(data), &addReq)
lastClient, err := monitorService.MonitorClientService.DetailByClientId(*addReq.ClientId)
uaStr := c.GetHeader("user-agent")
ip := c.ClientIP()
if err == nil {
last := lastClient.UserId + lastClient.Width.String() + lastClient.Height.String() + lastClient.Ip + lastClient.Ua
newStr := *addReq.UserId + addReq.Width.String() + addReq.Height.String() + ip + uaStr
if last == newStr {
// 前后数据一样,不用创建新的数据
fmt.Println("前后数据一样,不用创建新的数据")
c.Data(200, "image/gif", img_util.EmptyGif())
return
} else {
// 新建的话需要清除lastClient对应的缓存
monitorService.MonitorClientService.CacheUtil.RemoveCache("ClientId:" + lastClient.ClientId)
}
}
if uaStr != "" {
ua := core.UAParser.Parse(uaStr)
addReq.Ua = &uaStr
addReq.Os = &ua.Os.Family
addReq.Browser = &ua.UserAgent.Family
}
addReq.Ip = &ip
if ip != "" && ip != "127.0.0.1" {
regionInfo := util.IpUtil.Parse(ip)
// regionInfo := util.IpUtil.Parse("118.24.157.190")
addReq.City = &regionInfo.City
addReq.Country = &regionInfo.Country
addReq.Operator = &regionInfo.Operator
addReq.Province = &regionInfo.Province
}
monitorService.MonitorClientService.Add(addReq)
c.Data(200, "image/gif", img_util.EmptyGif())
}
// @Summary 监控-客户端信息删除
// @Tags monitor_client-监控-客户端信息
// @Produce json
// @Param Token header string true "token"
// @Param Id body number false "uuid"
// @Success 200 {object} response.Response "成功"
// @Router /api/admin/monitor_client/del [post]
func (hd *MonitorClientHandler) Del(c *gin.Context) {
var delReq MonitorClientDelReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &delReq)) {
return
}
response.CheckAndResp(c, monitorService.MonitorClientService.Del(delReq.Id))
}
// @Summary 监控-客户端信息删除-批量
// @Tags monitor_client-监控-客户端信息
//
// @Produce json
// @Param Token header string true "token"
// @Param Ids body string false "逗号分割的id"
// @Success 200 {object} response.Response "成功"
// @Router /api/admin/monitor_client/delBatch [post]
func (hd *MonitorClientHandler) DelBatch(c *gin.Context) {
var delReq MonitorClientDelBatchReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &delReq)) {
return
}
if delReq.Ids == "" {
response.FailWithMsg(c, response.SystemError, "请选择要删除的数据")
return
}
var Ids = strings.Split(delReq.Ids, ",")
response.CheckAndResp(c, monitorService.MonitorClientService.DelBatch(Ids))
}
// @Summary 监控-客户端信息导出
// @Tags monitor_client-监控-客户端信息
// @Produce json
// @Param Token header string true "token"
// @Param ProjectKey query string false "项目key"
// @Param ClientId query string false "sdk生成的客户端id"
// @Param UserId query string false "用户id"
// @Param Os query string false "系统"
// @Param Browser query string false "浏览器"
// @Param Country query string false "国家"
// @Param Province query string false "省份"
// @Param City query string false "城市"
// @Param Operator query string false "电信运营商"
// @Param Ip query string false "ip"
// @Param Width query number false "屏幕"
// @Param Height query number false "屏幕高度"
// @Param Ua query string false "ua记录"
// @Param CreateTimeStart query string false "创建时间"
// @Param CreateTimeEnd query string false "创建时间"
// @Router /api/admin/monitor_client/ExportFile [get]
func (hd *MonitorClientHandler) ExportFile(c *gin.Context) {
var listReq MonitorClientListReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &listReq)) {
return
}
res, err := monitorService.MonitorClientService.ExportFile(listReq)
if err != nil {
response.FailWithMsg(c, response.SystemError, "查询信息失败")
return
}
f, err := excel2.Export(res, monitorService.MonitorClientService.GetExcelCol(), "Sheet1", "监控-客户端信息")
if err != nil {
response.FailWithMsg(c, response.SystemError, "导出失败")
return
}
excel2.DownLoadExcel("监控-客户端信息"+time.Now().Format("20060102-150405"), c.Writer, f)
}
// @Summary 监控-客户端信息导入
// @Tags monitor_client-监控-客户端信息
// @Produce json
// @Router /api/admin/monitor_client/ImportFile [post]
func (hd *MonitorClientHandler) ImportFile(c *gin.Context) {
file, _, err := c.Request.FormFile("file")
if err != nil {
c.String(http.StatusInternalServerError, "文件不存在")
return
}
defer file.Close()
importList := []MonitorClientResp{}
err = excel2.GetExcelData(file, &importList, monitorService.MonitorClientService.GetExcelCol())
if err != nil {
c.String(http.StatusInternalServerError, err.Error())
return
}
err = monitorService.MonitorClientService.ImportFile(importList)
response.CheckAndResp(c, err)
}

View File

@@ -0,0 +1,217 @@
package monitorController
import (
"encoding/json"
"net/http"
"net/url"
"strconv"
"strings"
"time"
"x_admin/core/request"
"x_admin/core/response"
. "x_admin/schema/monitorSchema"
"x_admin/service/monitorService"
"x_admin/util"
"x_admin/util/excel2"
"x_admin/util/img_util"
"github.com/gin-gonic/gin"
"golang.org/x/sync/singleflight"
)
type MonitorErrorHandler struct {
requestGroup singleflight.Group
}
// @Summary 监控-错误列列表
// @Tags monitor_error-监控-错误列
// @Produce json
// @Param Token header string true "token"
// @Param PageNo query int true "页码"
// @Param PageSize query int true "每页数量"
// @Param ProjectKey query string false "项目key"
// @Param EventType query string false "事件类型"
// @Param Path query string false "URL地址"
// @Param Message query string false "错误消息"
// @Param Stack query string false "错误堆栈"
// @Param Md5 query string false "md5"
// @Param CreateTimeStart query string false "创建时间"
// @Param CreateTimeEnd query string false "创建时间"
//
// @Success 200 {object} response.Response{ data=response.PageResp{ lists=[]MonitorErrorResp}} "成功"
// @Router /api/admin/monitor_error/list [get]
func (hd *MonitorErrorHandler) List(c *gin.Context) {
var page request.PageReq
var listReq MonitorErrorListReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &page)) {
return
}
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &listReq)) {
return
}
res, err := monitorService.MonitorErrorService.List(page, listReq)
response.CheckAndRespWithData(c, res, err)
}
// @Summary 监控-错误列列表-所有
// @Tags monitor_error-监控-错误列
// @Produce json
// @Param ProjectKey query string false "项目key"
// @Param EventType query string false "事件类型"
// @Param Path query string false "URL地址"
// @Param Message query string false "错误消息"
// @Param Stack query string false "错误堆栈"
// @Param Md5 query string false "md5"
// @Param CreateTimeStart query string false "创建时间"
// @Param CreateTimeEnd query string false "创建时间"
// @Success 200 {object} response.Response{ data=[]MonitorErrorResp} "成功"
// @Router /api/admin/monitor_error/listAll [get]
func (hd *MonitorErrorHandler) ListAll(c *gin.Context) {
var listReq MonitorErrorListReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &listReq)) {
return
}
res, err := monitorService.MonitorErrorService.ListAll(listReq)
response.CheckAndRespWithData(c, res, err)
}
// @Summary 监控-错误列详情
// @Tags monitor_error-监控-错误列
// @Produce json
// @Param Token header string true "token"
// @Param Id query number false "错误id"
// @Success 200 {object} response.Response{ data=MonitorErrorResp} "成功"
// @Router /api/admin/monitor_error/detail [get]
func (hd *MonitorErrorHandler) Detail(c *gin.Context) {
var detailReq MonitorErrorDetailReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &detailReq)) {
return
}
res, err, _ := hd.requestGroup.Do("MonitorError:Detail:"+strconv.Itoa(detailReq.Id), func() (any, error) {
v, err := monitorService.MonitorErrorService.Detail(detailReq.Id)
return v, err
})
response.CheckAndRespWithData(c, res, err)
}
// @Summary 监控-错误列新增
// @Tags monitor_error-监控-错误列
// @Produce json
// @Param Token header string true "token"
// @Param ProjectKey body string false "项目key"
// @Param EventType body string false "事件类型"
// @Param Path body string false "URL地址"
// @Param Message body string false "错误消息"
// @Param Stack body string false "错误堆栈"
// @Param Md5 body string false "md5"
// @Success 200 {object} response.Response "成功"
// @Router /api/admin/monitor_error/add [post]
func (hd *MonitorErrorHandler) Add(c *gin.Context) {
data, err := url.QueryUnescape(c.Query("data"))
if err != nil {
c.Data(200, "image/gif", img_util.EmptyGif())
return
}
var addReq []MonitorErrorAddReq
json.Unmarshal([]byte(data), &addReq)
// if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &addReq)) {
// return
// }
for i := 0; i < len(addReq); i++ {
monitorService.MonitorErrorService.Add(addReq[i])
}
c.Data(200, "image/gif", img_util.EmptyGif())
}
// @Summary 监控-错误列删除
// @Tags monitor_error-监控-错误列
// @Produce json
// @Param Token header string true "token"
// @Param Id body number false "错误id"
// @Success 200 {object} response.Response "成功"
// @Router /api/admin/monitor_error/del [post]
func (hd *MonitorErrorHandler) Del(c *gin.Context) {
var delReq MonitorErrorDelReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &delReq)) {
return
}
response.CheckAndResp(c, monitorService.MonitorErrorService.Del(delReq.Id))
}
// @Summary 监控-错误列删除-批量
// @Tags monitor_error-监控-错误列
//
// @Produce json
// @Param Token header string true "token"
// @Param Ids body string false "逗号分割的id"
// @Success 200 {object} response.Response "成功"
// @Router /api/admin/monitor_error/delBatch [post]
func (hd *MonitorErrorHandler) DelBatch(c *gin.Context) {
var delReq MonitorErrorDelBatchReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &delReq)) {
return
}
if delReq.Ids == "" {
response.FailWithMsg(c, response.SystemError, "请选择要删除的数据")
return
}
var Ids = strings.Split(delReq.Ids, ",")
response.CheckAndResp(c, monitorService.MonitorErrorService.DelBatch(Ids))
}
// @Summary 监控-错误列导出
// @Tags monitor_error-监控-错误列
// @Produce json
// @Param Token header string true "token"
// @Param ProjectKey query string false "项目key"
// @Param EventType query string false "事件类型"
// @Param Path query string false "URL地址"
// @Param Message query string false "错误消息"
// @Param Stack query string false "错误堆栈"
// @Param Md5 query string false "md5"
// @Param CreateTimeStart query string false "创建时间"
// @Param CreateTimeEnd query string false "创建时间"
// @Router /api/admin/monitor_error/ExportFile [get]
func (hd *MonitorErrorHandler) ExportFile(c *gin.Context) {
var listReq MonitorErrorListReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &listReq)) {
return
}
res, err := monitorService.MonitorErrorService.ExportFile(listReq)
if err != nil {
response.FailWithMsg(c, response.SystemError, "查询信息失败")
return
}
f, err := excel2.Export(res, monitorService.MonitorErrorService.GetExcelCol(), "Sheet1", "监控-错误列")
if err != nil {
response.FailWithMsg(c, response.SystemError, "导出失败")
return
}
excel2.DownLoadExcel("监控-错误列"+time.Now().Format("20060102-150405"), c.Writer, f)
}
// @Summary 监控-错误列导入
// @Tags monitor_error-监控-错误列
// @Produce json
// @Router /api/admin/monitor_error/ImportFile [post]
func (hd *MonitorErrorHandler) ImportFile(c *gin.Context) {
file, _, err := c.Request.FormFile("file")
if err != nil {
c.String(http.StatusInternalServerError, "文件不存在")
return
}
defer file.Close()
importList := []MonitorErrorResp{}
err = excel2.GetExcelData(file, &importList, monitorService.MonitorErrorService.GetExcelCol())
if err != nil {
c.String(http.StatusInternalServerError, err.Error())
return
}
err = monitorService.MonitorErrorService.ImportFile(importList)
response.CheckAndResp(c, err)
}

View File

@@ -0,0 +1,221 @@
package monitorController
import (
"net/http"
"strconv"
"strings"
"time"
"x_admin/core/request"
"x_admin/core/response"
. "x_admin/schema/monitorSchema"
"x_admin/service/monitorService"
"x_admin/util"
"x_admin/util/excel2"
"github.com/gin-gonic/gin"
"golang.org/x/sync/singleflight"
)
type MonitorProjectHandler struct {
requestGroup singleflight.Group
}
// @Summary 监控项目列表
// @Tags monitor_project-监控项目
// @Produce json
// @Param Token header string true "token"
// @Param PageNo query int true "页码"
// @Param PageSize query int true "每页数量"
// @Param ProjectKey query string false "项目uuid"
// @Param ProjectName query string false "项目名称"
// @Param ProjectType query string false "项目类型go java web node php 等"
// @Param Status query number false "是否启用: 0=否, 1=是"
// @Param CreateTimeStart query string false "创建时间"
// @Param CreateTimeEnd query string false "创建时间"
// @Param UpdateTimeStart query string false "更新时间"
// @Param UpdateTimeEnd query string false "更新时间"
//
// @Success 200 {object} response.Response{ data=response.PageResp{ lists=[]MonitorProjectResp}} "成功"
// @Router /api/admin/monitor_project/list [get]
func (hd *MonitorProjectHandler) List(c *gin.Context) {
var page request.PageReq
var listReq MonitorProjectListReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &page)) {
return
}
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &listReq)) {
return
}
res, err := monitorService.MonitorProjectService.List(page, listReq)
response.CheckAndRespWithData(c, res, err)
}
// @Summary 监控项目列表-所有
// @Tags monitor_project-监控项目
// @Produce json
// @Param ProjectKey query string false "项目uuid"
// @Param ProjectName query string false "项目名称"
// @Param ProjectType query string false "项目类型go java web node php 等"
// @Param Status query number false "是否启用: 0=否, 1=是"
// @Param CreateTimeStart query string false "创建时间"
// @Param CreateTimeEnd query string false "创建时间"
// @Param UpdateTimeStart query string false "更新时间"
// @Param UpdateTimeEnd query string false "更新时间"
// @Success 200 {object} response.Response{ data=[]MonitorProjectResp} "成功"
// @Router /api/admin/monitor_project/listAll [get]
func (hd *MonitorProjectHandler) ListAll(c *gin.Context) {
var listReq MonitorProjectListReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &listReq)) {
return
}
res, err := monitorService.MonitorProjectService.ListAll(listReq)
response.CheckAndRespWithData(c, res, err)
}
// @Summary 监控项目详情
// @Tags monitor_project-监控项目
// @Produce json
// @Param Token header string true "token"
// @Param Id query number false "项目id"
// @Success 200 {object} response.Response{ data=MonitorProjectResp} "成功"
// @Router /api/admin/monitor_project/detail [get]
func (hd *MonitorProjectHandler) Detail(c *gin.Context) {
var detailReq MonitorProjectDetailReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &detailReq)) {
return
}
res, err, _ := hd.requestGroup.Do("MonitorProject:Detail:"+strconv.Itoa(detailReq.Id), func() (any, error) {
v, err := monitorService.MonitorProjectService.Detail(detailReq.Id)
return v, err
})
response.CheckAndRespWithData(c, res, err)
}
// @Summary 监控项目新增
// @Tags monitor_project-监控项目
// @Produce json
// @Param Token header string true "token"
// @Param ProjectKey body string false "项目uuid"
// @Param ProjectName body string false "项目名称"
// @Param ProjectType body string false "项目类型go java web node php 等"
// @Param Status body number false "是否启用: 0=否, 1=是"
// @Success 200 {object} response.Response "成功"
// @Router /api/admin/monitor_project/add [post]
func (hd *MonitorProjectHandler) Add(c *gin.Context) {
var addReq MonitorProjectAddReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &addReq)) {
return
}
createId, e := monitorService.MonitorProjectService.Add(addReq)
response.CheckAndRespWithData(c, createId, e)
}
// @Summary 监控项目编辑
// @Tags monitor_project-监控项目
// @Produce json
// @Param Token header string true "token"
// @Param Id body number false "项目id"
// @Param ProjectKey body string false "项目uuid"
// @Param ProjectName body string false "项目名称"
// @Param ProjectType body string false "项目类型go java web node php 等"
// @Param Status body number false "是否启用: 0=否, 1=是"
// @Success 200 {object} response.Response "成功"
// @Router /api/admin/monitor_project/edit [post]
func (hd *MonitorProjectHandler) Edit(c *gin.Context) {
var editReq MonitorProjectEditReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &editReq)) {
return
}
response.CheckAndRespWithData(c, editReq.Id, monitorService.MonitorProjectService.Edit(editReq))
}
// @Summary 监控项目删除
// @Tags monitor_project-监控项目
// @Produce json
// @Param Token header string true "token"
// @Param Id body number false "项目id"
// @Success 200 {object} response.Response "成功"
// @Router /api/admin/monitor_project/del [post]
func (hd *MonitorProjectHandler) Del(c *gin.Context) {
var delReq MonitorProjectDelReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &delReq)) {
return
}
response.CheckAndResp(c, monitorService.MonitorProjectService.Del(delReq.Id))
}
// @Summary 监控项目删除-批量
// @Tags monitor_project-监控项目
//
// @Produce json
// @Param Token header string true "token"
// @Param Ids body string false "逗号分割的id"
// @Success 200 {object} response.Response "成功"
// @Router /api/admin/monitor_project/delBatch [post]
func (hd *MonitorProjectHandler) DelBatch(c *gin.Context) {
var delReq MonitorProjectDelBatchReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &delReq)) {
return
}
if delReq.Ids == "" {
response.FailWithMsg(c, response.SystemError, "请选择要删除的数据")
return
}
var Ids = strings.Split(delReq.Ids, ",")
response.CheckAndResp(c, monitorService.MonitorProjectService.DelBatch(Ids))
}
// @Summary 监控项目导出
// @Tags monitor_project-监控项目
// @Produce json
// @Param Token header string true "token"
// @Param ProjectKey query string false "项目uuid"
// @Param ProjectName query string false "项目名称"
// @Param ProjectType query string false "项目类型go java web node php 等"
// @Param Status query number false "是否启用: 0=否, 1=是"
// @Param CreateTimeStart query string false "创建时间"
// @Param CreateTimeEnd query string false "创建时间"
// @Param UpdateTimeStart query string false "更新时间"
// @Param UpdateTimeEnd query string false "更新时间"
// @Router /api/admin/monitor_project/ExportFile [get]
func (hd *MonitorProjectHandler) ExportFile(c *gin.Context) {
var listReq MonitorProjectListReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &listReq)) {
return
}
res, err := monitorService.MonitorProjectService.ExportFile(listReq)
if err != nil {
response.FailWithMsg(c, response.SystemError, "查询信息失败")
return
}
f, err := excel2.Export(res, monitorService.MonitorProjectService.GetExcelCol(), "Sheet1", "监控项目")
if err != nil {
response.FailWithMsg(c, response.SystemError, "导出失败")
return
}
excel2.DownLoadExcel("监控项目"+time.Now().Format("20060102-150405"), c.Writer, f)
}
// @Summary 监控项目导入
// @Tags monitor_project-监控项目
// @Produce json
// @Router /api/admin/monitor_project/ImportFile [post]
func (hd *MonitorProjectHandler) ImportFile(c *gin.Context) {
file, _, err := c.Request.FormFile("file")
if err != nil {
c.String(http.StatusInternalServerError, "文件不存在")
return
}
defer file.Close()
importList := []MonitorProjectResp{}
err = excel2.GetExcelData(file, &importList, monitorService.MonitorProjectService.GetExcelCol())
if err != nil {
c.String(http.StatusInternalServerError, err.Error())
return
}
err = monitorService.MonitorProjectService.ImportFile(importList)
response.CheckAndResp(c, err)
}

View File

@@ -0,0 +1,38 @@
package settingController
import (
"x_admin/core/response"
. "x_admin/schema/settingSchema"
"x_admin/service/settingService"
"x_admin/util"
"github.com/gin-gonic/gin"
)
func CopyrightRoute(rg *gin.RouterGroup) {
// db := core.GetDB()
// service := NewSettingCopyrightService(db)
handle := copyrightHandler{}
rg = rg.Group("/setting")
rg.GET("/copyright/detail", handle.Detail)
rg.POST("/copyright/save", handle.save)
}
type copyrightHandler struct {
}
// detail 获取备案信息
func (ch copyrightHandler) Detail(c *gin.Context) {
res, err := settingService.CopyrightService.Detail()
response.CheckAndRespWithData(c, res, err)
}
// save 保存备案信息
func (ch copyrightHandler) save(c *gin.Context) {
var cReqs []SettingCopyrightItemReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSONArray(c, &cReqs)) {
return
}
response.CheckAndResp(c, settingService.CopyrightService.Save(cReqs))
}

View File

@@ -0,0 +1,79 @@
package settingController
import (
"x_admin/core/response"
"x_admin/middleware"
. "x_admin/schema/settingSchema"
"x_admin/service/settingService"
"x_admin/util"
"github.com/gin-gonic/gin"
)
func DictDataRoute(rg *gin.RouterGroup) {
// db := core.GetDB()
// permSrv := system.NewSystemAuthPermService(db)
// roleSrv := system.NewSystemAuthRoleService(db, permSrv)
// adminSrv := system.NewSystemAuthAdminService(db, permSrv, roleSrv)
// service := system.NewSystemLoginService(db, adminSrv)
// authSrv := NewSettingDictDataService(db)
handle := dictDataHandler{}
rg = rg.Group("/setting", middleware.TokenAuth())
rg.GET("/dict/data/all", handle.All)
rg.GET("/dict/data/detail", handle.Detail)
rg.POST("/dict/data/add", handle.Add)
rg.POST("/dict/data/edit", handle.Edit)
rg.POST("/dict/data/del", handle.Del)
}
type dictDataHandler struct{}
// all 字典数据所有
func (ddh dictDataHandler) All(c *gin.Context) {
var allReq SettingDictDataListReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &allReq)) {
return
}
res, err := settingService.DictDataService.All(allReq)
response.CheckAndRespWithData(c, res, err)
}
// detail 字典数据详情
func (ddh dictDataHandler) Detail(c *gin.Context) {
var detailReq SettingDictDataDetailReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &detailReq)) {
return
}
res, err := settingService.DictDataService.Detail(detailReq.ID)
response.CheckAndRespWithData(c, res, err)
}
// detail 字典数据新增
func (ddh dictDataHandler) Add(c *gin.Context) {
var addReq SettingDictDataAddReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &addReq)) {
return
}
response.CheckAndResp(c, settingService.DictDataService.Add(addReq))
}
// edit 字典数据编辑
func (ddh dictDataHandler) Edit(c *gin.Context) {
var editReq SettingDictDataEditReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &editReq)) {
return
}
response.CheckAndResp(c, settingService.DictDataService.Edit(editReq))
}
// del 字典数据删除
func (ddh dictDataHandler) Del(c *gin.Context) {
var delReq SettingDictDataDelReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &delReq)) {
return
}
response.CheckAndResp(c, settingService.DictDataService.Del(delReq))
}

View File

@@ -0,0 +1,91 @@
package settingController
import (
"x_admin/core/request"
"x_admin/core/response"
"x_admin/middleware"
. "x_admin/schema/settingSchema"
"x_admin/service/settingService"
"x_admin/util"
"github.com/gin-gonic/gin"
)
func DictTypeRoute(rg *gin.RouterGroup) {
// db := core.GetDB()
// permSrv := system.NewSystemAuthPermService(db)
// roleSrv := system.NewSystemAuthRoleService(db, permSrv)
// adminSrv := system.NewSystemAuthAdminService(db, permSrv, roleSrv)
// service := system.NewSystemLoginService(db, adminSrv)
// server := NewSettingDictTypeService(db)
handle := dictTypeHandler{}
rg = rg.Group("/setting", middleware.TokenAuth())
rg.GET("/dict/type/all", handle.All)
rg.GET("/dict/type/list", handle.List)
rg.GET("/dict/type/detail", handle.Detail)
rg.POST("/dict/type/add", handle.Add)
rg.POST("/dict/type/edit", handle.Edit)
rg.POST("/dict/type/del", handle.Del)
}
type dictTypeHandler struct{}
// all 字典类型所有
func (dth dictTypeHandler) All(c *gin.Context) {
res, err := settingService.DictTypeService.All()
response.CheckAndRespWithData(c, res, err)
}
// list 字典类型列表
func (dth dictTypeHandler) List(c *gin.Context) {
var page request.PageReq
var listReq SettingDictTypeListReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &page)) {
return
}
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &listReq)) {
return
}
res, err := settingService.DictTypeService.List(page, listReq)
response.CheckAndRespWithData(c, res, err)
}
// detail 字典类型详情
func (dth dictTypeHandler) Detail(c *gin.Context) {
var detailReq SettingDictTypeDetailReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &detailReq)) {
return
}
res, err := settingService.DictTypeService.Detail(detailReq.ID)
response.CheckAndRespWithData(c, res, err)
}
// detail 字典类型新增
func (dth dictTypeHandler) Add(c *gin.Context) {
var addReq SettingDictTypeAddReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &addReq)) {
return
}
response.CheckAndResp(c, settingService.DictTypeService.Add(addReq))
}
// edit 字典类型编辑
func (dth dictTypeHandler) Edit(c *gin.Context) {
var editReq SettingDictTypeEditReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &editReq)) {
return
}
response.CheckAndResp(c, settingService.DictTypeService.Edit(editReq))
}
// del 字典类型删除
func (dth dictTypeHandler) Del(c *gin.Context) {
var delReq SettingDictTypeDelReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &delReq)) {
return
}
response.CheckAndResp(c, settingService.DictTypeService.Del(delReq))
}

View File

@@ -0,0 +1,44 @@
package settingController
import (
"x_admin/core/response"
"x_admin/middleware"
. "x_admin/schema/settingSchema"
"x_admin/service/settingService"
"x_admin/util"
"github.com/gin-gonic/gin"
)
func WebsiteRoute(rg *gin.RouterGroup) {
// db := core.GetDB()
// permSrv := system.NewSystemAuthPermService(db)
// roleSrv := system.NewSystemAuthRoleService(db, permSrv)
// adminSrv := system.NewSystemAuthAdminService(db, permSrv, roleSrv)
// service := system.NewSystemLoginService(db, adminSrv)
// server := NewSettingWebsiteService(db)
handle := websiteHandler{}
rg = rg.Group("/setting", middleware.TokenAuth())
rg.GET("/website/detail", handle.Detail)
rg.POST("/website/save", handle.save)
}
type websiteHandler struct{}
// detail 获取网站信息
func (wh websiteHandler) Detail(c *gin.Context) {
res, err := settingService.WebsiteService.Detail()
response.CheckAndRespWithData(c, res, err)
}
// save 保存网站信息
func (wh websiteHandler) save(c *gin.Context) {
var wsReq SettingWebsiteReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &wsReq)) {
return
}
response.CheckAndResp(c, settingService.WebsiteService.Save(wsReq))
}

View File

@@ -0,0 +1,199 @@
package systemController
import (
"net/http"
"strconv"
"x_admin/config"
"x_admin/core/request"
"x_admin/core/response"
"x_admin/middleware"
"x_admin/schema/systemSchema"
"x_admin/service/systemService"
"x_admin/util/excel"
"x_admin/util"
"github.com/gin-gonic/gin"
)
func AdminRoute(rg *gin.RouterGroup) {
handle := AdminHandler{}
rg = rg.Group("/system", middleware.TokenAuth())
rg.GET("/admin/self", handle.Self)
rg.GET("/admin/list", handle.List)
rg.GET("/admin/listAll", handle.ListAll)
rg.GET("/admin/ListByDeptId", handle.ListByDeptId)
rg.GET("/admin/detail", handle.Detail)
rg.POST("/admin/add", middleware.RecordLog("管理员新增"), handle.Add)
rg.POST("/admin/edit", middleware.RecordLog("管理员编辑"), handle.Edit)
rg.POST("/admin/upInfo", middleware.RecordLog("管理员更新"), handle.UpInfo)
rg.POST("/admin/del", middleware.RecordLog("管理员删除"), handle.Del)
rg.POST("/admin/disable", middleware.RecordLog("管理员状态切换"), handle.Disable)
rg.GET("/admin/ExportFile", middleware.RecordLog("管理员导出"), handle.ExportFile)
rg.POST("/admin/ImportFile", handle.ImportFile)
}
type AdminHandler struct {
// Service ISystemAuthAdminService
}
// self 管理员信息
func (ah AdminHandler) Self(c *gin.Context) {
adminId := config.AdminConfig.GetAdminId(c)
res, err := systemService.AdminService.Self(adminId)
response.CheckAndRespWithData(c, res, err)
}
func (ah AdminHandler) ExportFile(c *gin.Context) {
var listReq systemSchema.SystemAuthAdminListReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &listReq)) {
return
}
res, err := systemService.AdminService.ExportFile(listReq)
if err != nil {
response.FailWithMsg(c, response.SystemError, "查询导出失败")
return
}
f, err := excel.NormalDynamicExport(res, "Sheet1", "用户信息", nil)
if err != nil {
response.FailWithMsg(c, response.SystemError, "导出失败")
return
}
excel.DownLoadExcel("用户信息", c.Writer, f)
// c.Header("Content-Type", "application/octet-stream")
// c.Header("Content-Disposition", "attachment; filename="+"用户信息.xlsx")
// c.Header("Content-Transfer-Encoding", "binary")
// f.Write(c.Writer)
}
// 导入文件
func (ah AdminHandler) ImportFile(c *gin.Context) {
file, _, err := c.Request.FormFile("file")
if err != nil {
c.String(http.StatusInternalServerError, "文件不存在")
return
}
defer file.Close()
importList := []systemSchema.SystemAuthAdminResp{}
err = excel.GetExcelData(file, &importList)
if err != nil {
c.String(http.StatusInternalServerError, err.Error())
return
}
err = systemService.AdminService.ImportFile(importList)
response.CheckAndResp(c, err)
}
// list 管理员列表
func (ah AdminHandler) List(c *gin.Context) {
var page request.PageReq
var listReq systemSchema.SystemAuthAdminListReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &page)) {
return
}
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &listReq)) {
return
}
res, err := systemService.AdminService.List(page, listReq)
response.CheckAndRespWithData(c, res, err)
}
// ListAll 所有管理员列表
func (ah AdminHandler) ListAll(c *gin.Context) {
var listReq systemSchema.SystemAuthAdminListReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &listReq)) {
return
}
res, err := systemService.AdminService.ListAll(listReq)
response.CheckAndRespWithData(c, res, err)
}
// detail 管理员详细
func (ah AdminHandler) Detail(c *gin.Context) {
var detailReq systemSchema.SystemAuthAdminDetailReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &detailReq)) {
return
}
res, err := systemService.AdminService.Detail(detailReq.ID)
response.CheckAndRespWithData(c, res, err)
}
// add 管理员新增
func (ah AdminHandler) Add(c *gin.Context) {
var addReq systemSchema.SystemAuthAdminAddReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &addReq)) {
return
}
response.CheckAndResp(c, systemService.AdminService.Add(addReq))
}
// edit 管理员编辑
func (ah AdminHandler) Edit(c *gin.Context) {
var editReq systemSchema.SystemAuthAdminEditReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &editReq)) {
return
}
response.CheckAndResp(c, systemService.AdminService.Edit(c, editReq))
}
// upInfo 管理员更新
func (ah AdminHandler) UpInfo(c *gin.Context) {
var updateReq systemSchema.SystemAuthAdminUpdateReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &updateReq)) {
return
}
response.CheckAndResp(c, systemService.AdminService.Update(
c, updateReq, config.AdminConfig.GetAdminId(c)))
}
// del 管理员删除
func (ah AdminHandler) Del(c *gin.Context) {
var delReq systemSchema.SystemAuthAdminDelReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &delReq)) {
return
}
response.CheckAndResp(c, systemService.AdminService.Del(c, delReq.ID))
}
// disable 管理员状态切换
func (ah AdminHandler) Disable(c *gin.Context) {
var disableReq systemSchema.SystemAuthAdminDisableReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &disableReq)) {
return
}
response.CheckAndResp(c, systemService.AdminService.Disable(c, disableReq.ID))
}
// @Summary 获取部门的用户
// @Description 获取部门的用户
// @Tags 管理员
// @Param deptId path int true "部门id"
// @Success 200 {object} response.Response "{"code": 200, "data": []}"
// @Router /system/admin/ListByDeptId/{deptId} [get]
func (ah AdminHandler) ListByDeptId(c *gin.Context) {
deptIdStr, bool := c.GetQuery("deptId")
if bool == false {
response.FailWithMsg(c, response.Failed, "deptId不能为空")
return
}
deptId, err := strconv.Atoi(deptIdStr)
if err != nil {
response.FailWithMsg(c, response.Failed, "deptId参数错误")
return
}
// if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &deptId)) {
// return
// }
res, err := systemService.AdminService.ListByUserIdOrDeptIdPostId(0, deptId, 0)
response.CheckAndRespWithData(c, res, err)
}

View File

@@ -0,0 +1,86 @@
package systemController
import (
"x_admin/core/response"
"x_admin/middleware"
. "x_admin/schema/systemSchema"
"x_admin/service/systemService"
"x_admin/util"
"github.com/gin-gonic/gin"
)
func DeptRoute(rg *gin.RouterGroup) {
// db := core.GetDB()
// permSrv := system.NewSystemAuthPermService(db)
// roleSrv := system.NewSystemAuthRoleService(db, permSrv)
// adminSrv := system.NewSystemAuthAdminService(db, permSrv, roleSrv)
// service := system.NewSystemLoginService(db, adminSrv)
// authSrv := system.NewSystemAuthMenuService(db, permSrv)
handle := deptHandler{}
rg = rg.Group("/system", middleware.TokenAuth())
rg.GET("/dept/all", handle.All)
rg.GET("/dept/list", handle.List)
rg.GET("/dept/detail", handle.Detail)
rg.POST("/dept/add", handle.Add)
rg.POST("/dept/edit", handle.Edit)
rg.POST("/dept/del", handle.Del)
}
type deptHandler struct {
}
// all 部门所有
func (dh deptHandler) All(c *gin.Context) {
res, err := systemService.DeptService.All()
response.CheckAndRespWithData(c, res, err)
}
// list 部门列表
func (dh deptHandler) List(c *gin.Context) {
var listReq SystemAuthDeptListReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &listReq)) {
return
}
res, err := systemService.DeptService.List(listReq)
response.CheckAndRespWithData(c, res, err)
}
// detail 部门详情
func (dh deptHandler) Detail(c *gin.Context) {
var detailReq SystemAuthDeptDetailReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &detailReq)) {
return
}
res, err := systemService.DeptService.Detail(detailReq.ID)
response.CheckAndRespWithData(c, res, err)
}
// add 部门新增
func (dh deptHandler) Add(c *gin.Context) {
var addReq SystemAuthDeptAddReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyBody(c, &addReq)) {
return
}
response.CheckAndResp(c, systemService.DeptService.Add(addReq))
}
// edit 部门编辑
func (dh deptHandler) Edit(c *gin.Context) {
var editReq SystemAuthDeptEditReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyBody(c, &editReq)) {
return
}
response.CheckAndResp(c, systemService.DeptService.Edit(editReq))
}
// del 部门删除
func (dh deptHandler) Del(c *gin.Context) {
var delReq SystemAuthDeptDelReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyBody(c, &delReq)) {
return
}
response.CheckAndResp(c, systemService.DeptService.Del(delReq.ID))
}

View File

@@ -0,0 +1,52 @@
package systemController
import (
"x_admin/core/request"
"x_admin/core/response"
"x_admin/middleware"
. "x_admin/schema/systemSchema"
"x_admin/service/systemService"
"x_admin/util"
"github.com/gin-gonic/gin"
)
func LogRoute(rg *gin.RouterGroup) {
handle := logHandler{}
rg = rg.Group("/system", middleware.TokenAuth())
rg.GET("/log/operate", handle.operate)
rg.GET("/log/login", handle.login)
}
type logHandler struct {
// Service ISystemLogsServer
}
// operate 操作日志
func (lh logHandler) operate(c *gin.Context) {
var page request.PageReq
var logReq SystemLogOperateReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &page)) {
return
}
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &logReq)) {
return
}
res, err := systemService.LogsService.Operate(page, logReq)
response.CheckAndRespWithData(c, res, err)
}
// login 登录日志
func (lh logHandler) login(c *gin.Context) {
var page request.PageReq
var logReq SystemLogLoginReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &page)) {
return
}
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &logReq)) {
return
}
res, err := systemService.LogsService.Login(page, logReq)
response.CheckAndRespWithData(c, res, err)
}

View File

@@ -0,0 +1,53 @@
package systemController
import (
"x_admin/core/response"
"x_admin/middleware"
"x_admin/schema/commonSchema"
. "x_admin/schema/systemSchema"
"x_admin/service/commonService"
"x_admin/service/systemService"
"x_admin/util"
"github.com/gin-gonic/gin"
)
func LoginRoute(rg *gin.RouterGroup) {
handle := loginHandler{}
rg = rg.Group("/system", middleware.TokenAuth())
rg.POST("/login", handle.login)
rg.POST("/logout", handle.logout)
}
type loginHandler struct{}
// login 登录系统
func (lh loginHandler) login(c *gin.Context) {
var params commonSchema.ClientParams
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &params)) {
return
}
err := commonService.CaptchaVerify(params)
if err != nil {
response.FailWithMsg(c, response.Failed, err.Error())
return
}
var loginReq SystemLoginReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &loginReq)) {
return
}
res, err := systemService.LoginService.Login(c, &loginReq)
response.CheckAndRespWithData(c, res, err)
}
// logout 登录退出
func (lh loginHandler) logout(c *gin.Context) {
var logoutReq SystemLogoutReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyHeader(c, &logoutReq)) {
return
}
response.CheckAndResp(c, systemService.LoginService.Logout(&logoutReq))
}

View File

@@ -0,0 +1,79 @@
package systemController
import (
"strconv"
"x_admin/config"
"x_admin/core/response"
"x_admin/middleware"
. "x_admin/schema/systemSchema"
"x_admin/service/systemService"
"x_admin/util"
"github.com/gin-gonic/gin"
)
func MenuRoute(rg *gin.RouterGroup) {
handle := menuHandler{}
rg = rg.Group("/system", middleware.TokenAuth())
rg.GET("/menu/route", handle.route)
rg.GET("/menu/list", handle.List)
rg.GET("/menu/detail", handle.Detail)
rg.POST("/menu/add", handle.Add)
rg.POST("/menu/edit", handle.Edit)
rg.POST("/menu/del", handle.Del)
}
type menuHandler struct {
}
// route 菜单路由
func (mh menuHandler) route(c *gin.Context) {
roleId := config.AdminConfig.GetRoleId(c)
id, _ := strconv.ParseUint(roleId, 10, 64)
res, err := systemService.MenuService.SelectMenuByRoleId(c, uint(id))
response.CheckAndRespWithData(c, res, err)
}
// list 菜单列表
func (mh menuHandler) List(c *gin.Context) {
res, err := systemService.MenuService.List()
response.CheckAndRespWithData(c, res, err)
}
// detail 菜单详情
func (mh menuHandler) Detail(c *gin.Context) {
var detailReq SystemAuthMenuDetailReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &detailReq)) {
return
}
res, err := systemService.MenuService.Detail(detailReq.ID)
response.CheckAndRespWithData(c, res, err)
}
// add 新增菜单
func (mh menuHandler) Add(c *gin.Context) {
var addReq SystemAuthMenuAddReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &addReq)) {
return
}
response.CheckAndResp(c, systemService.MenuService.Add(addReq))
}
// edit 编辑菜单
func (mh menuHandler) Edit(c *gin.Context) {
var editReq SystemAuthMenuEditReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &editReq)) {
return
}
response.CheckAndResp(c, systemService.MenuService.Edit(editReq))
}
// del 删除菜单
func (mh menuHandler) Del(c *gin.Context) {
var delReq SystemAuthMenuDelReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &delReq)) {
return
}
response.CheckAndResp(c, systemService.MenuService.Del(delReq.ID))
}

View File

@@ -0,0 +1,84 @@
package systemController
import (
"x_admin/core/request"
"x_admin/core/response"
"x_admin/middleware"
. "x_admin/schema/systemSchema"
"x_admin/service/systemService"
"x_admin/util"
"github.com/gin-gonic/gin"
)
func PostRoute(rg *gin.RouterGroup) {
handle := postHandler{}
rg = rg.Group("/system", middleware.TokenAuth())
rg.GET("/post/all", handle.All)
rg.GET("/post/list", handle.List)
rg.GET("/post/detail", handle.Detail)
rg.POST("/post/add", handle.Add)
rg.POST("/post/edit", handle.Edit)
rg.POST("/post/del", handle.Del)
}
type postHandler struct {
}
// all 岗位所有
func (ph postHandler) All(c *gin.Context) {
res, err := systemService.PostService.All()
response.CheckAndRespWithData(c, res, err)
}
// list 岗位列表
func (ph postHandler) List(c *gin.Context) {
var page request.PageReq
var listReq SystemAuthPostListReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &page)) {
return
}
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &listReq)) {
return
}
res, err := systemService.PostService.List(page, listReq)
response.CheckAndRespWithData(c, res, err)
}
// detail 岗位详情
func (ph postHandler) Detail(c *gin.Context) {
var detailReq SystemAuthPostDetailReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &detailReq)) {
return
}
res, err := systemService.PostService.Detail(detailReq.ID)
response.CheckAndRespWithData(c, res, err)
}
// add 岗位新增
func (ph postHandler) Add(c *gin.Context) {
var addReq SystemAuthPostAddReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyBody(c, &addReq)) {
return
}
response.CheckAndResp(c, systemService.PostService.Add(addReq))
}
// edit 岗位编辑
func (ph postHandler) Edit(c *gin.Context) {
var editReq SystemAuthPostEditReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyBody(c, &editReq)) {
return
}
response.CheckAndResp(c, systemService.PostService.Edit(editReq))
}
// del 岗位删除
func (ph postHandler) Del(c *gin.Context) {
var delReq SystemAuthPostDelReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyBody(c, &delReq)) {
return
}
response.CheckAndResp(c, systemService.PostService.Del(delReq.ID))
}

View File

@@ -0,0 +1,82 @@
package systemController
import (
"x_admin/core/request"
"x_admin/core/response"
"x_admin/middleware"
. "x_admin/schema/systemSchema"
"x_admin/service/systemService"
"x_admin/util"
"github.com/gin-gonic/gin"
)
func RoleRoute(rg *gin.RouterGroup) {
handle := RoleHandler{}
rg = rg.Group("/system", middleware.TokenAuth())
rg.GET("/role/all", handle.All)
rg.GET("/role/list", middleware.RecordLog("角色列表"), handle.List)
rg.GET("/role/detail", middleware.RecordLog("角色详情"), handle.Detail)
rg.POST("/role/add", middleware.RecordLog("角色新增"), handle.Add)
rg.POST("/role/edit", middleware.RecordLog("角色编辑"), handle.Edit)
rg.POST("/role/del", middleware.RecordLog("角色删除"), handle.Del)
}
type RoleHandler struct {
// Service ISystemAuthRoleService
}
// all 角色所有
func (rh RoleHandler) All(c *gin.Context) {
res, err := systemService.RoleService.All()
response.CheckAndRespWithData(c, res, err)
}
// list 角色列表
func (rh RoleHandler) List(c *gin.Context) {
var page request.PageReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &page)) {
return
}
res, err := systemService.RoleService.List(page)
response.CheckAndRespWithData(c, res, err)
}
// detail 角色详情
func (rh RoleHandler) Detail(c *gin.Context) {
var detailReq SystemAuthRoleDetailReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &detailReq)) {
return
}
res, err := systemService.RoleService.Detail(detailReq.ID)
response.CheckAndRespWithData(c, res, err)
}
// add 新增角色
func (rh RoleHandler) Add(c *gin.Context) {
var addReq SystemAuthRoleAddReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &addReq)) {
return
}
response.CheckAndResp(c, systemService.RoleService.Add(addReq))
}
// edit 编辑角色
func (rh RoleHandler) Edit(c *gin.Context) {
var editReq SystemAuthRoleEditReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &editReq)) {
return
}
response.CheckAndResp(c, systemService.RoleService.Edit(editReq))
}
// del 删除角色
func (rh RoleHandler) Del(c *gin.Context) {
var delReq SystemAuthRoleDelReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &delReq)) {
return
}
response.CheckAndResp(c, systemService.RoleService.Del(delReq.ID))
}

View File

@@ -0,0 +1,216 @@
package admin_ctl
import (
"net/http"
"strconv"
"strings"
"time"
"x_admin/core/request"
"x_admin/core/response"
"x_admin/schema"
"x_admin/service"
"x_admin/util"
"x_admin/util/excel2"
"github.com/gin-gonic/gin"
"golang.org/x/sync/singleflight"
)
type UserProtocolHandler struct {
requestGroup singleflight.Group
}
// @Summary 用户协议列表
// @Tags user_protocol-用户协议
// @Produce json
// @Param Token header string true "token"
// @Param PageNo query int true "页码"
// @Param PageSize query int true "每页数量"
// @Param Title query string false "标题"
// @Param Content query string false "协议内容"
// @Param Sort query number false "排序"
// @Param CreateTimeStart query string false "创建时间"
// @Param CreateTimeEnd query string false "创建时间"
// @Param UpdateTimeStart query string false "更新时间"
// @Param UpdateTimeEnd query string false "更新时间"
//
// @Success 200 {object} response.Response{ data=response.PageResp{ lists=[]UserProtocolResp}} "成功"
// @Router /api/admin/user_protocol/list [get]
func (hd *UserProtocolHandler) List(c *gin.Context) {
var page request.PageReq
var listReq schema.UserProtocolListReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &page)) {
return
}
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &listReq)) {
return
}
res, err := service.UserProtocolService.List(page, listReq)
response.CheckAndRespWithData(c, res, err)
}
// @Summary 用户协议列表-所有
// @Tags user_protocol-用户协议
// @Produce json
// @Param Title query string false "标题"
// @Param Content query string false "协议内容"
// @Param Sort query number false "排序"
// @Param CreateTimeStart query string false "创建时间"
// @Param CreateTimeEnd query string false "创建时间"
// @Param UpdateTimeStart query string false "更新时间"
// @Param UpdateTimeEnd query string false "更新时间"
// @Success 200 {object} response.Response{ data=[]UserProtocolResp} "成功"
// @Router /api/admin/user_protocol/listAll [get]
func (hd *UserProtocolHandler) ListAll(c *gin.Context) {
var listReq schema.UserProtocolListReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &listReq)) {
return
}
res, err := service.UserProtocolService.ListAll(listReq)
response.CheckAndRespWithData(c, res, err)
}
// @Summary 用户协议详情
// @Tags user_protocol-用户协议
// @Produce json
// @Param Token header string true "token"
// @Param Id query number false "Id"
// @Success 200 {object} response.Response{ data=UserProtocolResp} "成功"
// @Router /api/admin/user_protocol/detail [get]
func (hd *UserProtocolHandler) Detail(c *gin.Context) {
var detailReq schema.UserProtocolDetailReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &detailReq)) {
return
}
res, err, _ := hd.requestGroup.Do("UserProtocol:Detail:"+strconv.Itoa(detailReq.Id), func() (any, error) {
v, err := service.UserProtocolService.Detail(detailReq.Id)
return v, err
})
response.CheckAndRespWithData(c, res, err)
}
// @Summary 用户协议新增
// @Tags user_protocol-用户协议
// @Produce json
// @Param Token header string true "token"
// @Param Title body string false "标题"
// @Param Content body string false "协议内容"
// @Param Sort body number false "排序"
// @Success 200 {object} response.Response "成功"
// @Router /api/admin/user_protocol/add [post]
func (hd *UserProtocolHandler) Add(c *gin.Context) {
var addReq schema.UserProtocolAddReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &addReq)) {
return
}
createId, e := service.UserProtocolService.Add(addReq)
response.CheckAndRespWithData(c, createId, e)
}
// @Summary 用户协议编辑
// @Tags user_protocol-用户协议
// @Produce json
// @Param Token header string true "token"
// @Param Id body number false "Id"
// @Param Title body string false "标题"
// @Param Content body string false "协议内容"
// @Param Sort body number false "排序"
// @Success 200 {object} response.Response "成功"
// @Router /api/admin/user_protocol/edit [post]
func (hd *UserProtocolHandler) Edit(c *gin.Context) {
var editReq schema.UserProtocolEditReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &editReq)) {
return
}
response.CheckAndRespWithData(c, editReq.Id, service.UserProtocolService.Edit(editReq))
}
// @Summary 用户协议删除
// @Tags user_protocol-用户协议
// @Produce json
// @Param Token header string true "token"
// @Param Id body number false "Id"
// @Success 200 {object} response.Response "成功"
// @Router /api/admin/user_protocol/del [post]
func (hd *UserProtocolHandler) Del(c *gin.Context) {
var delReq schema.UserProtocolDelReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &delReq)) {
return
}
response.CheckAndResp(c, service.UserProtocolService.Del(delReq.Id))
}
// @Summary 用户协议删除-批量
// @Tags user_protocol-用户协议
//
// @Produce json
// @Param Token header string true "token"
// @Param Ids body string false "逗号分割的id"
// @Success 200 {object} response.Response "成功"
// @Router /api/admin/user_protocol/delBatch [post]
func (hd *UserProtocolHandler) DelBatch(c *gin.Context) {
var delReq schema.UserProtocolDelBatchReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &delReq)) {
return
}
if delReq.Ids == "" {
response.FailWithMsg(c, response.SystemError, "请选择要删除的数据")
return
}
var Ids = strings.Split(delReq.Ids, ",")
response.CheckAndResp(c, service.UserProtocolService.DelBatch(Ids))
}
// @Summary 用户协议导出
// @Tags user_protocol-用户协议
// @Produce json
// @Param Token header string true "token"
// @Param Title query string false "标题"
// @Param Content query string false "协议内容"
// @Param Sort query number false "排序"
// @Param CreateTimeStart query string false "创建时间"
// @Param CreateTimeEnd query string false "创建时间"
// @Param UpdateTimeStart query string false "更新时间"
// @Param UpdateTimeEnd query string false "更新时间"
// @Router /api/admin/user_protocol/ExportFile [get]
func (hd *UserProtocolHandler) ExportFile(c *gin.Context) {
var listReq schema.UserProtocolListReq
if response.IsFailWithResp(c, util.VerifyUtil.VerifyQuery(c, &listReq)) {
return
}
res, err := service.UserProtocolService.ExportFile(listReq)
if err != nil {
response.FailWithMsg(c, response.SystemError, "查询信息失败")
return
}
f, err := excel2.Export(res, service.UserProtocolService.GetExcelCol(), "Sheet1", "用户协议")
if err != nil {
response.FailWithMsg(c, response.SystemError, "导出失败")
return
}
excel2.DownLoadExcel("用户协议"+time.Now().Format("20060102-150405"), c.Writer, f)
}
// @Summary 用户协议导入
// @Tags user_protocol-用户协议
// @Produce json
// @Router /api/admin/user_protocol/ImportFile [post]
func (hd *UserProtocolHandler) ImportFile(c *gin.Context) {
file, _, err := c.Request.FormFile("file")
if err != nil {
c.String(http.StatusInternalServerError, "文件不存在")
return
}
defer file.Close()
importList := []schema.UserProtocolResp{}
err = excel2.GetExcelData(file, &importList, service.UserProtocolService.GetExcelCol())
if err != nil {
c.String(http.StatusInternalServerError, err.Error())
return
}
err = service.UserProtocolService.ImportFile(importList)
response.CheckAndResp(c, err)
}