1
This commit is contained in:
194
app/admin/apis/wm_network.go
Normal file
194
app/admin/apis/wm_network.go
Normal file
@ -0,0 +1,194 @@
|
||||
package apis
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/go-admin-team/go-admin-core/sdk/api"
|
||||
"github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth/user"
|
||||
_ "github.com/go-admin-team/go-admin-core/sdk/pkg/response"
|
||||
|
||||
"go-admin/app/admin/models"
|
||||
"go-admin/app/admin/service"
|
||||
"go-admin/app/admin/service/dto"
|
||||
"go-admin/common/actions"
|
||||
)
|
||||
|
||||
type WmNetwork struct {
|
||||
api.Api
|
||||
}
|
||||
|
||||
// GetPage 获取网络配置列表
|
||||
// @Summary 获取网络配置列表
|
||||
// @Description 获取网络配置列表
|
||||
// @Tags 网络配置
|
||||
// @Param networkName query string false "网络名称"
|
||||
// @Param code query string false "网络代码"
|
||||
// @Param receiveAddress query string false "接收钱包地址"
|
||||
// @Param pageSize query int false "页条数"
|
||||
// @Param pageIndex query int false "页码"
|
||||
// @Success 200 {object} response.Response{data=response.Page{list=[]models.WmNetwork}} "{"code": 200, "data": [...]}"
|
||||
// @Router /api/v1/wm-network [get]
|
||||
// @Security Bearer
|
||||
func (e WmNetwork) GetPage(c *gin.Context) {
|
||||
req := dto.WmNetworkGetPageReq{}
|
||||
s := service.WmNetwork{}
|
||||
err := e.MakeContext(c).
|
||||
MakeOrm().
|
||||
Bind(&req).
|
||||
MakeService(&s.Service).
|
||||
Errors
|
||||
if err != nil {
|
||||
e.Logger.Error(err)
|
||||
e.Error(500, err, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
p := actions.GetPermissionFromContext(c)
|
||||
list := make([]models.WmNetwork, 0)
|
||||
var count int64
|
||||
|
||||
err = s.GetPage(&req, p, &list, &count)
|
||||
if err != nil {
|
||||
e.Error(500, err, fmt.Sprintf("获取网络配置失败,\r\n失败信息 %s", err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
|
||||
}
|
||||
|
||||
// Get 获取网络配置
|
||||
// @Summary 获取网络配置
|
||||
// @Description 获取网络配置
|
||||
// @Tags 网络配置
|
||||
// @Param id path int false "id"
|
||||
// @Success 200 {object} response.Response{data=models.WmNetwork} "{"code": 200, "data": [...]}"
|
||||
// @Router /api/v1/wm-network/{id} [get]
|
||||
// @Security Bearer
|
||||
func (e WmNetwork) Get(c *gin.Context) {
|
||||
req := dto.WmNetworkGetReq{}
|
||||
s := service.WmNetwork{}
|
||||
err := e.MakeContext(c).
|
||||
MakeOrm().
|
||||
Bind(&req).
|
||||
MakeService(&s.Service).
|
||||
Errors
|
||||
if err != nil {
|
||||
e.Logger.Error(err)
|
||||
e.Error(500, err, err.Error())
|
||||
return
|
||||
}
|
||||
var object models.WmNetwork
|
||||
|
||||
p := actions.GetPermissionFromContext(c)
|
||||
err = s.Get(&req, p, &object)
|
||||
if err != nil {
|
||||
e.Error(500, err, fmt.Sprintf("获取网络配置失败,\r\n失败信息 %s", err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
e.OK(object, "查询成功")
|
||||
}
|
||||
|
||||
// Insert 创建网络配置
|
||||
// @Summary 创建网络配置
|
||||
// @Description 创建网络配置
|
||||
// @Tags 网络配置
|
||||
// @Accept application/json
|
||||
// @Product application/json
|
||||
// @Param data body dto.WmNetworkInsertReq true "data"
|
||||
// @Success 200 {object} response.Response "{"code": 200, "message": "添加成功"}"
|
||||
// @Router /api/v1/wm-network [post]
|
||||
// @Security Bearer
|
||||
// func (e WmNetwork) Insert(c *gin.Context) {
|
||||
// req := dto.WmNetworkInsertReq{}
|
||||
// s := service.WmNetwork{}
|
||||
// err := e.MakeContext(c).
|
||||
// MakeOrm().
|
||||
// Bind(&req).
|
||||
// MakeService(&s.Service).
|
||||
// Errors
|
||||
// if err != nil {
|
||||
// e.Logger.Error(err)
|
||||
// e.Error(500, err, err.Error())
|
||||
// return
|
||||
// }
|
||||
// // 设置创建人
|
||||
// req.SetCreateBy(user.GetUserId(c))
|
||||
|
||||
// err = s.Insert(&req)
|
||||
// if err != nil {
|
||||
// e.Error(500, err, fmt.Sprintf("创建网络配置失败,\r\n失败信息 %s", err.Error()))
|
||||
// return
|
||||
// }
|
||||
|
||||
// e.OK(req.GetId(), "创建成功")
|
||||
// }
|
||||
|
||||
// Update 修改网络配置
|
||||
// @Summary 修改网络配置
|
||||
// @Description 修改网络配置
|
||||
// @Tags 网络配置
|
||||
// @Accept application/json
|
||||
// @Product application/json
|
||||
// @Param id path int true "id"
|
||||
// @Param data body dto.WmNetworkUpdateReq true "body"
|
||||
// @Success 200 {object} response.Response "{"code": 200, "message": "修改成功"}"
|
||||
// @Router /api/v1/wm-network/{id} [put]
|
||||
// @Security Bearer
|
||||
func (e WmNetwork) Update(c *gin.Context) {
|
||||
req := dto.WmNetworkUpdateReq{}
|
||||
s := service.WmNetwork{}
|
||||
err := e.MakeContext(c).
|
||||
MakeOrm().
|
||||
Bind(&req).
|
||||
MakeService(&s.Service).
|
||||
Errors
|
||||
if err != nil {
|
||||
e.Logger.Error(err)
|
||||
e.Error(500, err, err.Error())
|
||||
return
|
||||
}
|
||||
req.SetUpdateBy(user.GetUserId(c))
|
||||
p := actions.GetPermissionFromContext(c)
|
||||
|
||||
err = s.Update(&req, p)
|
||||
if err != nil {
|
||||
e.Error(500, err, fmt.Sprintf("修改网络配置失败,\r\n失败信息 %s", err.Error()))
|
||||
return
|
||||
}
|
||||
e.OK(req.GetId(), "修改成功")
|
||||
}
|
||||
|
||||
// Delete 删除网络配置
|
||||
// @Summary 删除网络配置
|
||||
// @Description 删除网络配置
|
||||
// @Tags 网络配置
|
||||
// @Param data body dto.WmNetworkDeleteReq true "body"
|
||||
// @Success 200 {object} response.Response "{"code": 200, "message": "删除成功"}"
|
||||
// @Router /api/v1/wm-network [delete]
|
||||
// @Security Bearer
|
||||
// func (e WmNetwork) Delete(c *gin.Context) {
|
||||
// s := service.WmNetwork{}
|
||||
// req := dto.WmNetworkDeleteReq{}
|
||||
// err := e.MakeContext(c).
|
||||
// MakeOrm().
|
||||
// Bind(&req).
|
||||
// MakeService(&s.Service).
|
||||
// Errors
|
||||
// if err != nil {
|
||||
// e.Logger.Error(err)
|
||||
// e.Error(500, err, err.Error())
|
||||
// return
|
||||
// }
|
||||
|
||||
// // req.SetUpdateBy(user.GetUserId(c))
|
||||
// p := actions.GetPermissionFromContext(c)
|
||||
|
||||
// err = s.Remove(&req, p)
|
||||
// if err != nil {
|
||||
// e.Error(500, err, fmt.Sprintf("删除网络配置失败,\r\n失败信息 %s", err.Error()))
|
||||
// return
|
||||
// }
|
||||
// e.OK( req.GetId(), "删除成功")
|
||||
// }
|
||||
205
app/admin/apis/wm_token.go
Normal file
205
app/admin/apis/wm_token.go
Normal file
@ -0,0 +1,205 @@
|
||||
package apis
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/go-admin-team/go-admin-core/sdk/api"
|
||||
"github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth/user"
|
||||
_ "github.com/go-admin-team/go-admin-core/sdk/pkg/response"
|
||||
|
||||
"go-admin/app/admin/models"
|
||||
"go-admin/app/admin/service"
|
||||
"go-admin/app/admin/service/dto"
|
||||
"go-admin/common/actions"
|
||||
)
|
||||
|
||||
type WmToken struct {
|
||||
api.Api
|
||||
}
|
||||
|
||||
// GetPage 获取代币配置列表
|
||||
// @Summary 获取代币配置列表
|
||||
// @Description 获取代币配置列表
|
||||
// @Tags 代币配置
|
||||
// @Param networkId query string false "网络id"
|
||||
// @Param tokenName query string false "代币名称"
|
||||
// @Param pageSize query int false "页条数"
|
||||
// @Param pageIndex query int false "页码"
|
||||
// @Success 200 {object} response.Response{data=response.Page{list=[]models.WmToken}} "{"code": 200, "data": [...]}"
|
||||
// @Router /api/v1/wm-token [get]
|
||||
// @Security Bearer
|
||||
func (e WmToken) GetPage(c *gin.Context) {
|
||||
req := dto.WmTokenGetPageReq{}
|
||||
s := service.WmToken{}
|
||||
err := e.MakeContext(c).
|
||||
MakeOrm().
|
||||
Bind(&req).
|
||||
MakeService(&s.Service).
|
||||
Errors
|
||||
if err != nil {
|
||||
e.Logger.Error(err)
|
||||
e.Error(500, err, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
p := actions.GetPermissionFromContext(c)
|
||||
list := make([]models.WmToken, 0)
|
||||
var count int64
|
||||
|
||||
err = s.GetPage(&req, p, &list, &count)
|
||||
if err != nil {
|
||||
e.Error(500, err, fmt.Sprintf("获取代币配置失败,\r\n失败信息 %s", err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
|
||||
}
|
||||
|
||||
// Get 获取代币配置
|
||||
// @Summary 获取代币配置
|
||||
// @Description 获取代币配置
|
||||
// @Tags 代币配置
|
||||
// @Param id path int false "id"
|
||||
// @Success 200 {object} response.Response{data=models.WmToken} "{"code": 200, "data": [...]}"
|
||||
// @Router /api/v1/wm-token/{id} [get]
|
||||
// @Security Bearer
|
||||
func (e WmToken) Get(c *gin.Context) {
|
||||
req := dto.WmTokenGetReq{}
|
||||
s := service.WmToken{}
|
||||
err := e.MakeContext(c).
|
||||
MakeOrm().
|
||||
Bind(&req).
|
||||
MakeService(&s.Service).
|
||||
Errors
|
||||
if err != nil {
|
||||
e.Logger.Error(err)
|
||||
e.Error(500, err, err.Error())
|
||||
return
|
||||
}
|
||||
var object models.WmToken
|
||||
|
||||
p := actions.GetPermissionFromContext(c)
|
||||
err = s.Get(&req, p, &object)
|
||||
if err != nil {
|
||||
e.Error(500, err, fmt.Sprintf("获取代币配置失败,\r\n失败信息 %s", err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
e.OK(object, "查询成功")
|
||||
}
|
||||
|
||||
// Insert 创建代币配置
|
||||
// @Summary 创建代币配置
|
||||
// @Description 创建代币配置
|
||||
// @Tags 代币配置
|
||||
// @Accept application/json
|
||||
// @Product application/json
|
||||
// @Param data body dto.WmTokenInsertReq true "data"
|
||||
// @Success 200 {object} response.Response "{"code": 200, "message": "添加成功"}"
|
||||
// @Router /api/v1/wm-token [post]
|
||||
// @Security Bearer
|
||||
func (e WmToken) Insert(c *gin.Context) {
|
||||
req := dto.WmTokenInsertReq{}
|
||||
s := service.WmToken{}
|
||||
err := e.MakeContext(c).
|
||||
MakeOrm().
|
||||
Bind(&req).
|
||||
MakeService(&s.Service).
|
||||
Errors
|
||||
if err != nil {
|
||||
e.Logger.Error(err)
|
||||
e.Error(500, err, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if err := req.Valid(); err != nil {
|
||||
e.Error(500, err, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
// 设置创建人
|
||||
req.SetCreateBy(user.GetUserId(c))
|
||||
|
||||
err = s.Insert(&req)
|
||||
if err != nil {
|
||||
e.Error(500, err, fmt.Sprintf("创建代币配置失败,\r\n失败信息 %s", err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
e.OK(req.GetId(), "创建成功")
|
||||
}
|
||||
|
||||
// Update 修改代币配置
|
||||
// @Summary 修改代币配置
|
||||
// @Description 修改代币配置
|
||||
// @Tags 代币配置
|
||||
// @Accept application/json
|
||||
// @Product application/json
|
||||
// @Param id path int true "id"
|
||||
// @Param data body dto.WmTokenUpdateReq true "body"
|
||||
// @Success 200 {object} response.Response "{"code": 200, "message": "修改成功"}"
|
||||
// @Router /api/v1/wm-token/{id} [put]
|
||||
// @Security Bearer
|
||||
func (e WmToken) Update(c *gin.Context) {
|
||||
req := dto.WmTokenUpdateReq{}
|
||||
s := service.WmToken{}
|
||||
err := e.MakeContext(c).
|
||||
MakeOrm().
|
||||
Bind(&req).
|
||||
MakeService(&s.Service).
|
||||
Errors
|
||||
if err != nil {
|
||||
e.Logger.Error(err)
|
||||
e.Error(500, err, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if err := req.Valid(); err != nil {
|
||||
e.Error(500, err, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
req.SetUpdateBy(user.GetUserId(c))
|
||||
p := actions.GetPermissionFromContext(c)
|
||||
|
||||
err = s.Update(&req, p)
|
||||
if err != nil {
|
||||
e.Error(500, err, fmt.Sprintf("修改代币配置失败,\r\n失败信息 %s", err.Error()))
|
||||
return
|
||||
}
|
||||
e.OK(req.GetId(), "修改成功")
|
||||
}
|
||||
|
||||
// Delete 删除代币配置
|
||||
// @Summary 删除代币配置
|
||||
// @Description 删除代币配置
|
||||
// @Tags 代币配置
|
||||
// @Param data body dto.WmTokenDeleteReq true "body"
|
||||
// @Success 200 {object} response.Response "{"code": 200, "message": "删除成功"}"
|
||||
// @Router /api/v1/wm-token [delete]
|
||||
// @Security Bearer
|
||||
func (e WmToken) Delete(c *gin.Context) {
|
||||
s := service.WmToken{}
|
||||
req := dto.WmTokenDeleteReq{}
|
||||
err := e.MakeContext(c).
|
||||
MakeOrm().
|
||||
Bind(&req).
|
||||
MakeService(&s.Service).
|
||||
Errors
|
||||
if err != nil {
|
||||
e.Logger.Error(err)
|
||||
e.Error(500, err, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
// req.SetUpdateBy(user.GetUserId(c))
|
||||
p := actions.GetPermissionFromContext(c)
|
||||
|
||||
err = s.Remove(&req, p)
|
||||
if err != nil {
|
||||
e.Error(500, err, fmt.Sprintf("删除代币配置失败,\r\n失败信息 %s", err.Error()))
|
||||
return
|
||||
}
|
||||
e.OK(req.GetId(), "删除成功")
|
||||
}
|
||||
@ -1,9 +1,10 @@
|
||||
package apis
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"fmt"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/gin-gonic/gin/binding"
|
||||
"github.com/go-admin-team/go-admin-core/sdk/api"
|
||||
"github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth/user"
|
||||
_ "github.com/go-admin-team/go-admin-core/sdk/pkg/response"
|
||||
@ -30,18 +31,18 @@ type WmTransfer struct {
|
||||
// @Router /api/v1/wm-transfer [get]
|
||||
// @Security Bearer
|
||||
func (e WmTransfer) GetPage(c *gin.Context) {
|
||||
req := dto.WmTransferGetPageReq{}
|
||||
s := service.WmTransfer{}
|
||||
err := e.MakeContext(c).
|
||||
MakeOrm().
|
||||
Bind(&req).
|
||||
MakeService(&s.Service).
|
||||
Errors
|
||||
if err != nil {
|
||||
e.Logger.Error(err)
|
||||
e.Error(500, err, err.Error())
|
||||
return
|
||||
}
|
||||
req := dto.WmTransferGetPageReq{}
|
||||
s := service.WmTransfer{}
|
||||
err := e.MakeContext(c).
|
||||
MakeOrm().
|
||||
Bind(&req, binding.Form).
|
||||
MakeService(&s.Service).
|
||||
Errors
|
||||
if err != nil {
|
||||
e.Logger.Error(err)
|
||||
e.Error(500, err, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
p := actions.GetPermissionFromContext(c)
|
||||
list := make([]models.WmTransfer, 0)
|
||||
@ -50,7 +51,7 @@ func (e WmTransfer) GetPage(c *gin.Context) {
|
||||
err = s.GetPage(&req, p, &list, &count)
|
||||
if err != nil {
|
||||
e.Error(500, err, fmt.Sprintf("获取批量转账任务失败,\r\n失败信息 %s", err.Error()))
|
||||
return
|
||||
return
|
||||
}
|
||||
|
||||
e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
|
||||
@ -67,7 +68,7 @@ func (e WmTransfer) GetPage(c *gin.Context) {
|
||||
func (e WmTransfer) Get(c *gin.Context) {
|
||||
req := dto.WmTransferGetReq{}
|
||||
s := service.WmTransfer{}
|
||||
err := e.MakeContext(c).
|
||||
err := e.MakeContext(c).
|
||||
MakeOrm().
|
||||
Bind(&req).
|
||||
MakeService(&s.Service).
|
||||
@ -83,10 +84,10 @@ func (e WmTransfer) Get(c *gin.Context) {
|
||||
err = s.Get(&req, p, &object)
|
||||
if err != nil {
|
||||
e.Error(500, err, fmt.Sprintf("获取批量转账任务失败,\r\n失败信息 %s", err.Error()))
|
||||
return
|
||||
return
|
||||
}
|
||||
|
||||
e.OK( object, "查询成功")
|
||||
e.OK(object, "查询成功")
|
||||
}
|
||||
|
||||
// Insert 创建批量转账任务
|
||||
@ -100,65 +101,36 @@ func (e WmTransfer) Get(c *gin.Context) {
|
||||
// @Router /api/v1/wm-transfer [post]
|
||||
// @Security Bearer
|
||||
func (e WmTransfer) Insert(c *gin.Context) {
|
||||
req := dto.WmTransferInsertReq{}
|
||||
s := service.WmTransfer{}
|
||||
err := e.MakeContext(c).
|
||||
MakeOrm().
|
||||
Bind(&req).
|
||||
MakeService(&s.Service).
|
||||
Errors
|
||||
if err != nil {
|
||||
e.Logger.Error(err)
|
||||
e.Error(500, err, err.Error())
|
||||
return
|
||||
}
|
||||
req := dto.WmTransferInsertReq{}
|
||||
s := service.WmTransfer{}
|
||||
err := e.MakeContext(c).
|
||||
MakeOrm().
|
||||
Bind(&req).
|
||||
MakeService(&s.Service).
|
||||
Errors
|
||||
if err != nil {
|
||||
e.Logger.Error(err)
|
||||
e.Error(500, err, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if err := req.Valid(); err != nil {
|
||||
e.Error(500, err, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
// 设置创建人
|
||||
req.SetCreateBy(user.GetUserId(c))
|
||||
|
||||
err = s.Insert(&req)
|
||||
if err != nil {
|
||||
e.Error(500, err, fmt.Sprintf("创建批量转账任务失败,\r\n失败信息 %s", err.Error()))
|
||||
return
|
||||
return
|
||||
}
|
||||
|
||||
e.OK(req.GetId(), "创建成功")
|
||||
}
|
||||
|
||||
// Update 修改批量转账任务
|
||||
// @Summary 修改批量转账任务
|
||||
// @Description 修改批量转账任务
|
||||
// @Tags 批量转账任务
|
||||
// @Accept application/json
|
||||
// @Product application/json
|
||||
// @Param id path int true "id"
|
||||
// @Param data body dto.WmTransferUpdateReq true "body"
|
||||
// @Success 200 {object} response.Response "{"code": 200, "message": "修改成功"}"
|
||||
// @Router /api/v1/wm-transfer/{id} [put]
|
||||
// @Security Bearer
|
||||
func (e WmTransfer) Update(c *gin.Context) {
|
||||
req := dto.WmTransferUpdateReq{}
|
||||
s := service.WmTransfer{}
|
||||
err := e.MakeContext(c).
|
||||
MakeOrm().
|
||||
Bind(&req).
|
||||
MakeService(&s.Service).
|
||||
Errors
|
||||
if err != nil {
|
||||
e.Logger.Error(err)
|
||||
e.Error(500, err, err.Error())
|
||||
return
|
||||
}
|
||||
req.SetUpdateBy(user.GetUserId(c))
|
||||
p := actions.GetPermissionFromContext(c)
|
||||
|
||||
err = s.Update(&req, p)
|
||||
if err != nil {
|
||||
e.Error(500, err, fmt.Sprintf("修改批量转账任务失败,\r\n失败信息 %s", err.Error()))
|
||||
return
|
||||
}
|
||||
e.OK( req.GetId(), "修改成功")
|
||||
}
|
||||
|
||||
// Delete 删除批量转账任务
|
||||
// @Summary 删除批量转账任务
|
||||
// @Description 删除批量转账任务
|
||||
@ -168,18 +140,18 @@ func (e WmTransfer) Update(c *gin.Context) {
|
||||
// @Router /api/v1/wm-transfer [delete]
|
||||
// @Security Bearer
|
||||
func (e WmTransfer) Delete(c *gin.Context) {
|
||||
s := service.WmTransfer{}
|
||||
req := dto.WmTransferDeleteReq{}
|
||||
err := e.MakeContext(c).
|
||||
MakeOrm().
|
||||
Bind(&req).
|
||||
MakeService(&s.Service).
|
||||
Errors
|
||||
if err != nil {
|
||||
e.Logger.Error(err)
|
||||
e.Error(500, err, err.Error())
|
||||
return
|
||||
}
|
||||
s := service.WmTransfer{}
|
||||
req := dto.WmTransferDeleteReq{}
|
||||
err := e.MakeContext(c).
|
||||
MakeOrm().
|
||||
Bind(&req).
|
||||
MakeService(&s.Service).
|
||||
Errors
|
||||
if err != nil {
|
||||
e.Logger.Error(err)
|
||||
e.Error(500, err, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
// req.SetUpdateBy(user.GetUserId(c))
|
||||
p := actions.GetPermissionFromContext(c)
|
||||
@ -187,7 +159,28 @@ func (e WmTransfer) Delete(c *gin.Context) {
|
||||
err = s.Remove(&req, p)
|
||||
if err != nil {
|
||||
e.Error(500, err, fmt.Sprintf("删除批量转账任务失败,\r\n失败信息 %s", err.Error()))
|
||||
return
|
||||
return
|
||||
}
|
||||
e.OK( req.GetId(), "删除成功")
|
||||
e.OK(req.GetId(), "删除成功")
|
||||
}
|
||||
|
||||
// 清理数据
|
||||
func (e WmTransfer) ClearAll(c *gin.Context) {
|
||||
s := service.WmTransfer{}
|
||||
err := e.MakeContext(c).
|
||||
MakeOrm().
|
||||
MakeService(&s.Service).
|
||||
Errors
|
||||
if err != nil {
|
||||
e.Logger.Error(err)
|
||||
e.Error(500, err, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
err = s.ClearAll()
|
||||
if err != nil {
|
||||
e.Error(500, err, fmt.Sprintf("清理数据失败,\r\n失败信息 %s", err.Error()))
|
||||
return
|
||||
}
|
||||
e.OK(nil, "清理数据成功")
|
||||
}
|
||||
|
||||
@ -1,9 +1,10 @@
|
||||
package apis
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"fmt"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/gin-gonic/gin/binding"
|
||||
"github.com/go-admin-team/go-admin-core/sdk/api"
|
||||
"github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth/user"
|
||||
_ "github.com/go-admin-team/go-admin-core/sdk/pkg/response"
|
||||
@ -28,18 +29,18 @@ type WmTransferItem struct {
|
||||
// @Router /api/v1/wm-transfer-item [get]
|
||||
// @Security Bearer
|
||||
func (e WmTransferItem) GetPage(c *gin.Context) {
|
||||
req := dto.WmTransferItemGetPageReq{}
|
||||
s := service.WmTransferItem{}
|
||||
err := e.MakeContext(c).
|
||||
MakeOrm().
|
||||
Bind(&req).
|
||||
MakeService(&s.Service).
|
||||
Errors
|
||||
if err != nil {
|
||||
e.Logger.Error(err)
|
||||
e.Error(500, err, err.Error())
|
||||
return
|
||||
}
|
||||
req := dto.WmTransferItemGetPageReq{}
|
||||
s := service.WmTransferItem{}
|
||||
err := e.MakeContext(c).
|
||||
MakeOrm().
|
||||
Bind(&req).
|
||||
MakeService(&s.Service).
|
||||
Errors
|
||||
if err != nil {
|
||||
e.Logger.Error(err)
|
||||
e.Error(500, err, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
p := actions.GetPermissionFromContext(c)
|
||||
list := make([]models.WmTransferItem, 0)
|
||||
@ -48,12 +49,59 @@ func (e WmTransferItem) GetPage(c *gin.Context) {
|
||||
err = s.GetPage(&req, p, &list, &count)
|
||||
if err != nil {
|
||||
e.Error(500, err, fmt.Sprintf("获取批量转账明细失败,\r\n失败信息 %s", err.Error()))
|
||||
return
|
||||
return
|
||||
}
|
||||
|
||||
e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
|
||||
}
|
||||
|
||||
// 导出excel
|
||||
func (e WmTransferItem) Export(c *gin.Context) {
|
||||
s := service.WmTransferItem{}
|
||||
req := dto.WmTransferItemExportReq{}
|
||||
err := e.MakeContext(c).
|
||||
MakeOrm().
|
||||
Bind(&req, binding.Form, binding.Query).
|
||||
MakeService(&s.Service).
|
||||
Errors
|
||||
|
||||
if err != nil {
|
||||
e.Logger.Error(err)
|
||||
e.Error(500, err, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
p := actions.GetPermissionFromContext(c)
|
||||
err = s.ExportExcel(&req, p, c)
|
||||
if err != nil {
|
||||
e.Error(500, err, fmt.Sprintf("导出excel失败,\r\n失败信息 %s", err.Error()))
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// ExportAutoLog 导出自动转账日志
|
||||
func (e WmTransferItem) ExportAutoLog(c *gin.Context) {
|
||||
s := service.WmTransferItem{}
|
||||
req := dto.WmTransferItemAutoLogPageReq{}
|
||||
err := e.MakeContext(c).
|
||||
MakeOrm().
|
||||
Bind(&req, binding.Form, binding.Query).
|
||||
MakeService(&s.Service).
|
||||
Errors
|
||||
|
||||
if err != nil {
|
||||
e.Logger.Error(err)
|
||||
e.Error(500, err, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
err = s.ExportAutoLog(&req, c)
|
||||
if err != nil {
|
||||
e.Error(500, err, fmt.Sprintf("导出自动转账日志失败,\r\n失败信息 %s", err.Error()))
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// Get 获取批量转账明细
|
||||
// @Summary 获取批量转账明细
|
||||
// @Description 获取批量转账明细
|
||||
@ -65,7 +113,7 @@ func (e WmTransferItem) GetPage(c *gin.Context) {
|
||||
func (e WmTransferItem) Get(c *gin.Context) {
|
||||
req := dto.WmTransferItemGetReq{}
|
||||
s := service.WmTransferItem{}
|
||||
err := e.MakeContext(c).
|
||||
err := e.MakeContext(c).
|
||||
MakeOrm().
|
||||
Bind(&req).
|
||||
MakeService(&s.Service).
|
||||
@ -81,10 +129,10 @@ func (e WmTransferItem) Get(c *gin.Context) {
|
||||
err = s.Get(&req, p, &object)
|
||||
if err != nil {
|
||||
e.Error(500, err, fmt.Sprintf("获取批量转账明细失败,\r\n失败信息 %s", err.Error()))
|
||||
return
|
||||
return
|
||||
}
|
||||
|
||||
e.OK( object, "查询成功")
|
||||
e.OK(object, "查询成功")
|
||||
}
|
||||
|
||||
// Insert 创建批量转账明细
|
||||
@ -98,25 +146,25 @@ func (e WmTransferItem) Get(c *gin.Context) {
|
||||
// @Router /api/v1/wm-transfer-item [post]
|
||||
// @Security Bearer
|
||||
func (e WmTransferItem) Insert(c *gin.Context) {
|
||||
req := dto.WmTransferItemInsertReq{}
|
||||
s := service.WmTransferItem{}
|
||||
err := e.MakeContext(c).
|
||||
MakeOrm().
|
||||
Bind(&req).
|
||||
MakeService(&s.Service).
|
||||
Errors
|
||||
if err != nil {
|
||||
e.Logger.Error(err)
|
||||
e.Error(500, err, err.Error())
|
||||
return
|
||||
}
|
||||
req := dto.WmTransferItemInsertReq{}
|
||||
s := service.WmTransferItem{}
|
||||
err := e.MakeContext(c).
|
||||
MakeOrm().
|
||||
Bind(&req).
|
||||
MakeService(&s.Service).
|
||||
Errors
|
||||
if err != nil {
|
||||
e.Logger.Error(err)
|
||||
e.Error(500, err, err.Error())
|
||||
return
|
||||
}
|
||||
// 设置创建人
|
||||
req.SetCreateBy(user.GetUserId(c))
|
||||
|
||||
err = s.Insert(&req)
|
||||
if err != nil {
|
||||
e.Error(500, err, fmt.Sprintf("创建批量转账明细失败,\r\n失败信息 %s", err.Error()))
|
||||
return
|
||||
return
|
||||
}
|
||||
|
||||
e.OK(req.GetId(), "创建成功")
|
||||
@ -134,27 +182,27 @@ func (e WmTransferItem) Insert(c *gin.Context) {
|
||||
// @Router /api/v1/wm-transfer-item/{id} [put]
|
||||
// @Security Bearer
|
||||
func (e WmTransferItem) Update(c *gin.Context) {
|
||||
req := dto.WmTransferItemUpdateReq{}
|
||||
s := service.WmTransferItem{}
|
||||
err := e.MakeContext(c).
|
||||
MakeOrm().
|
||||
Bind(&req).
|
||||
MakeService(&s.Service).
|
||||
Errors
|
||||
if err != nil {
|
||||
e.Logger.Error(err)
|
||||
e.Error(500, err, err.Error())
|
||||
return
|
||||
}
|
||||
req := dto.WmTransferItemUpdateReq{}
|
||||
s := service.WmTransferItem{}
|
||||
err := e.MakeContext(c).
|
||||
MakeOrm().
|
||||
Bind(&req).
|
||||
MakeService(&s.Service).
|
||||
Errors
|
||||
if err != nil {
|
||||
e.Logger.Error(err)
|
||||
e.Error(500, err, err.Error())
|
||||
return
|
||||
}
|
||||
req.SetUpdateBy(user.GetUserId(c))
|
||||
p := actions.GetPermissionFromContext(c)
|
||||
|
||||
err = s.Update(&req, p)
|
||||
if err != nil {
|
||||
e.Error(500, err, fmt.Sprintf("修改批量转账明细失败,\r\n失败信息 %s", err.Error()))
|
||||
return
|
||||
return
|
||||
}
|
||||
e.OK( req.GetId(), "修改成功")
|
||||
e.OK(req.GetId(), "修改成功")
|
||||
}
|
||||
|
||||
// Delete 删除批量转账明细
|
||||
@ -166,18 +214,18 @@ func (e WmTransferItem) Update(c *gin.Context) {
|
||||
// @Router /api/v1/wm-transfer-item [delete]
|
||||
// @Security Bearer
|
||||
func (e WmTransferItem) Delete(c *gin.Context) {
|
||||
s := service.WmTransferItem{}
|
||||
req := dto.WmTransferItemDeleteReq{}
|
||||
err := e.MakeContext(c).
|
||||
MakeOrm().
|
||||
Bind(&req).
|
||||
MakeService(&s.Service).
|
||||
Errors
|
||||
if err != nil {
|
||||
e.Logger.Error(err)
|
||||
e.Error(500, err, err.Error())
|
||||
return
|
||||
}
|
||||
s := service.WmTransferItem{}
|
||||
req := dto.WmTransferItemDeleteReq{}
|
||||
err := e.MakeContext(c).
|
||||
MakeOrm().
|
||||
Bind(&req).
|
||||
MakeService(&s.Service).
|
||||
Errors
|
||||
if err != nil {
|
||||
e.Logger.Error(err)
|
||||
e.Error(500, err, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
// req.SetUpdateBy(user.GetUserId(c))
|
||||
p := actions.GetPermissionFromContext(c)
|
||||
@ -185,7 +233,32 @@ func (e WmTransferItem) Delete(c *gin.Context) {
|
||||
err = s.Remove(&req, p)
|
||||
if err != nil {
|
||||
e.Error(500, err, fmt.Sprintf("删除批量转账明细失败,\r\n失败信息 %s", err.Error()))
|
||||
return
|
||||
return
|
||||
}
|
||||
e.OK( req.GetId(), "删除成功")
|
||||
e.OK(req.GetId(), "删除成功")
|
||||
}
|
||||
|
||||
// GetAutoTransferLogPage 获取自动转账日志列表
|
||||
func (e WmTransferItem) GetAutoTransferLogPage(c *gin.Context) {
|
||||
req := dto.WmTransferItemAutoLogPageReq{}
|
||||
s := service.WmTransferItem{}
|
||||
err := e.MakeContext(c).
|
||||
MakeOrm().
|
||||
Bind(&req, binding.Form, binding.Query).
|
||||
MakeService(&s.Service).
|
||||
Errors
|
||||
if err != nil {
|
||||
e.Logger.Error(err)
|
||||
e.Error(500, err, err.Error())
|
||||
return
|
||||
}
|
||||
p := actions.GetPermissionFromContext(c)
|
||||
list := make([]dto.WmTransferItemResp, 0)
|
||||
var count int64
|
||||
err = s.GetAutoTransferLogPage(&req, p, &list, &count)
|
||||
if err != nil {
|
||||
e.Error(500, err, fmt.Sprintf("获取自动转账日志失败,\r\n失败信息 %s", err.Error()))
|
||||
return
|
||||
}
|
||||
e.PageOK(list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
|
||||
}
|
||||
|
||||
@ -152,3 +152,25 @@ func (e WmWalletInfo) Delete(c *gin.Context) {
|
||||
}
|
||||
e.OK(req.GetId(), "删除成功")
|
||||
}
|
||||
|
||||
// ClearAll 清空所有钱包信息
|
||||
func (e WmWalletInfo) ClearAll(c *gin.Context) {
|
||||
s := service.WmWalletInfo{}
|
||||
err := e.MakeContext(c).
|
||||
MakeOrm().
|
||||
MakeService(&s.Service).
|
||||
Errors
|
||||
if err != nil {
|
||||
e.Logger.Error(err)
|
||||
e.Error(500, err, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
err = s.ClearAll()
|
||||
|
||||
if err != nil {
|
||||
e.Error(500, err, fmt.Sprintf("清空所有钱包信息失败,\r\n失败信息 %s", err.Error()))
|
||||
return
|
||||
}
|
||||
e.OK(nil, "清空成功")
|
||||
}
|
||||
|
||||
28
app/admin/models/wm_network.go
Normal file
28
app/admin/models/wm_network.go
Normal file
@ -0,0 +1,28 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"go-admin/common/models"
|
||||
)
|
||||
|
||||
type WmNetwork struct {
|
||||
models.Model
|
||||
|
||||
NetworkName string `json:"networkName" gorm:"type:varchar(20);comment:网络名称"`
|
||||
Code string `json:"code" gorm:"type:varchar(50);comment:网络代码"`
|
||||
ReceiveAddress string `json:"receiveAddress" gorm:"type:varchar(255);comment:接收钱包地址"`
|
||||
models.ModelTime
|
||||
models.ControlBy
|
||||
}
|
||||
|
||||
func (WmNetwork) TableName() string {
|
||||
return "wm_network"
|
||||
}
|
||||
|
||||
func (e *WmNetwork) Generate() models.ActiveRecord {
|
||||
o := *e
|
||||
return &o
|
||||
}
|
||||
|
||||
func (e *WmNetwork) GetId() interface{} {
|
||||
return e.Id
|
||||
}
|
||||
36
app/admin/models/wm_token.go
Normal file
36
app/admin/models/wm_token.go
Normal file
@ -0,0 +1,36 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"go-admin/common/models"
|
||||
|
||||
"github.com/shopspring/decimal"
|
||||
)
|
||||
|
||||
type WmToken struct {
|
||||
models.Model
|
||||
|
||||
NetworkId int `json:"networkId" gorm:"type:bigint;comment:网络id"`
|
||||
NetworkCode string `json:"code" gorm:"-"`
|
||||
TokenName string `json:"tokenName" gorm:"type:varchar(20);comment:代币名称"`
|
||||
TokenAddress string `json:"tokenAddress" gorm:"type:varchar(50);comment:代币地址"`
|
||||
Decimals int `json:"decimals" gorm:"type:int;comment:代币精度"`
|
||||
IsAuto int `json:"isAuto" gorm:"type:tinyint;comment:开启自动转账 1-开启 2-关闭"`
|
||||
TriggerAmount decimal.Decimal `json:"triggerAmount" gorm:"type:decimal(18,8);comment:触发数量"`
|
||||
TransType int `json:"transType" gorm:"type:tinyint;comment:转账类型 1-百分比 2-实际金额"`
|
||||
TransValue decimal.Decimal `json:"transValue" gorm:"type:decimal(18,8);comment:转账值"`
|
||||
models.ModelTime
|
||||
models.ControlBy
|
||||
}
|
||||
|
||||
func (WmToken) TableName() string {
|
||||
return "wm_token"
|
||||
}
|
||||
|
||||
func (e *WmToken) Generate() models.ActiveRecord {
|
||||
o := *e
|
||||
return &o
|
||||
}
|
||||
|
||||
func (e *WmToken) GetId() interface{} {
|
||||
return e.Id
|
||||
}
|
||||
@ -1,24 +1,28 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
|
||||
"go-admin/common/models"
|
||||
|
||||
)
|
||||
|
||||
type WmTransfer struct {
|
||||
models.Model
|
||||
|
||||
Type int64 `json:"type" gorm:"type:tinyint;comment:类型 0-百分比 1-实际金额"`
|
||||
TransferType int64 `json:"transferType" gorm:"type:tinyint;comment:转账类型 0-批量转出 1-批量汇总"`
|
||||
Status int64 `json:"status" gorm:"type:tinyint;comment:状态"`
|
||||
Remark string `json:"remark" gorm:"type:varchar(255);comment:备注信息"`
|
||||
models.ModelTime
|
||||
models.ControlBy
|
||||
models.Model
|
||||
|
||||
NetworkId int `json:"networkId" gorm:"type:int;comment:网络id"`
|
||||
TokenAddress string `json:"tokenAddress" gorm:"type:varchar(255);comment:代币地址"`
|
||||
Type int `json:"type" gorm:"type:tinyint;comment:类型 0-百分比 1-实际金额"`
|
||||
TransferType int `json:"transferType" gorm:"type:tinyint;comment:转账类型 0-批量转出 1-批量汇总"`
|
||||
Status int `json:"status" gorm:"type:tinyint;comment:状态"`
|
||||
Remark string `json:"remark" gorm:"type:varchar(255);comment:备注信息"`
|
||||
Total int `json:"total" gorm:"-"`
|
||||
Sucess int `json:"sucess" gorm:"-"`
|
||||
Fail int `json:"fail" gorm:"-"`
|
||||
Pending int `json:"pending" gorm:"-"`
|
||||
models.ModelTime
|
||||
models.ControlBy
|
||||
}
|
||||
|
||||
func (WmTransfer) TableName() string {
|
||||
return "wm_transfer"
|
||||
return "wm_transfer"
|
||||
}
|
||||
|
||||
func (e *WmTransfer) Generate() models.ActiveRecord {
|
||||
@ -28,4 +32,4 @@ func (e *WmTransfer) Generate() models.ActiveRecord {
|
||||
|
||||
func (e *WmTransfer) GetId() interface{} {
|
||||
return e.Id
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,27 +1,34 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
|
||||
"go-admin/common/models"
|
||||
|
||||
"github.com/shopspring/decimal"
|
||||
)
|
||||
|
||||
type WmTransferItem struct {
|
||||
models.Model
|
||||
|
||||
TokenAddress string `json:"tokenAddress" gorm:"type:varchar(50);comment:代币地址"`
|
||||
FromAddress string `json:"fromAddress" gorm:"type:varchar(50);comment:来源地址"`
|
||||
ToAddress string `json:"toAddress" gorm:"type:varchar(50);comment:目标地址"`
|
||||
Amount string `json:"amount" gorm:"type:decimal(18,8);comment:代币数量"`
|
||||
Type string `json:"type" gorm:"type:tinyint;comment:类型 0-主账号百分比 1-实际数量"`
|
||||
TypeValue string `json:"typeValue" gorm:"type:decimal(18,8);comment:操作类型值"`
|
||||
PrivateKey string `json:"privateKey" gorm:"type:varchar(255);comment:私钥"`
|
||||
models.ModelTime
|
||||
models.ControlBy
|
||||
models.Model
|
||||
|
||||
NetworkId int `json:"networkId" gorm:"type:int;comment:网络ID"`
|
||||
TransferId int `json:"transferId" gorm:"type:int;comment:转账记录ID"`
|
||||
IsAuto int `json:"isAuto" gorm:"type:tinyint;comment:是否自动转账 1-是 2-否 "`
|
||||
TokenAddress string `json:"tokenAddress" gorm:"type:varchar(50);comment:代币地址"`
|
||||
Decimals int `json:"decimals" gorm:"type:int;comment:代币精度"`
|
||||
FromAddress string `json:"fromAddress" gorm:"type:varchar(50);comment:来源地址"`
|
||||
ToAddress string `json:"toAddress" gorm:"type:varchar(50);comment:目标地址"`
|
||||
Amount decimal.Decimal `json:"amount" gorm:"type:decimal(18,8);comment:代币数量"`
|
||||
Type int `json:"type" gorm:"type:tinyint;comment:类型 0-主账号百分比 1-实际数量"`
|
||||
TypeValue decimal.Decimal `json:"typeValue" gorm:"type:decimal(18,8);comment:操作类型值"`
|
||||
PrivateKey string `json:"privateKey" gorm:"type:varchar(255);comment:私钥"`
|
||||
Status int `json:"status" gorm:"type:tinyint;comment:状态 0-默认 1-已发起 2-成功 3-失败"`
|
||||
Hash string `json:"hash" gorm:"type:varchar(255);comment:交易hash"`
|
||||
Remark string `json:"remark" gorm:"type:varchar(255);comment:备注"`
|
||||
models.ModelTime
|
||||
models.ControlBy
|
||||
}
|
||||
|
||||
func (WmTransferItem) TableName() string {
|
||||
return "wm_transfer_item"
|
||||
return "wm_transfer_item"
|
||||
}
|
||||
|
||||
func (e *WmTransferItem) Generate() models.ActiveRecord {
|
||||
@ -31,4 +38,4 @@ func (e *WmTransferItem) Generate() models.ActiveRecord {
|
||||
|
||||
func (e *WmTransferItem) GetId() interface{} {
|
||||
return e.Id
|
||||
}
|
||||
}
|
||||
|
||||
27
app/admin/router/wm_network.go
Normal file
27
app/admin/router/wm_network.go
Normal file
@ -0,0 +1,27 @@
|
||||
package router
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
jwt "github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth"
|
||||
|
||||
"go-admin/app/admin/apis"
|
||||
"go-admin/common/actions"
|
||||
"go-admin/common/middleware"
|
||||
)
|
||||
|
||||
func init() {
|
||||
routerCheckRole = append(routerCheckRole, registerWmNetworkRouter)
|
||||
}
|
||||
|
||||
// registerWmNetworkRouter
|
||||
func registerWmNetworkRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
|
||||
api := apis.WmNetwork{}
|
||||
r := v1.Group("/wm-network").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
|
||||
{
|
||||
r.GET("", actions.PermissionAction(), api.GetPage)
|
||||
r.GET("/:id", actions.PermissionAction(), api.Get)
|
||||
// r.POST("", api.Insert)
|
||||
r.PUT("/:id", actions.PermissionAction(), api.Update)
|
||||
// r.DELETE("", api.Delete)
|
||||
}
|
||||
}
|
||||
27
app/admin/router/wm_token.go
Normal file
27
app/admin/router/wm_token.go
Normal file
@ -0,0 +1,27 @@
|
||||
package router
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
jwt "github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth"
|
||||
|
||||
"go-admin/app/admin/apis"
|
||||
"go-admin/common/middleware"
|
||||
"go-admin/common/actions"
|
||||
)
|
||||
|
||||
func init() {
|
||||
routerCheckRole = append(routerCheckRole, registerWmTokenRouter)
|
||||
}
|
||||
|
||||
// registerWmTokenRouter
|
||||
func registerWmTokenRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
|
||||
api := apis.WmToken{}
|
||||
r := v1.Group("/wm-token").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
|
||||
{
|
||||
r.GET("", actions.PermissionAction(), api.GetPage)
|
||||
r.GET("/:id", actions.PermissionAction(), api.Get)
|
||||
r.POST("", api.Insert)
|
||||
r.PUT("/:id", actions.PermissionAction(), api.Update)
|
||||
r.DELETE("", api.Delete)
|
||||
}
|
||||
}
|
||||
@ -5,8 +5,8 @@ import (
|
||||
jwt "github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth"
|
||||
|
||||
"go-admin/app/admin/apis"
|
||||
"go-admin/common/middleware"
|
||||
"go-admin/common/actions"
|
||||
"go-admin/common/middleware"
|
||||
)
|
||||
|
||||
func init() {
|
||||
@ -21,7 +21,9 @@ func registerWmTransferRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMid
|
||||
r.GET("", actions.PermissionAction(), api.GetPage)
|
||||
r.GET("/:id", actions.PermissionAction(), api.Get)
|
||||
r.POST("", api.Insert)
|
||||
r.PUT("/:id", actions.PermissionAction(), api.Update)
|
||||
// r.PUT("/:id", actions.PermissionAction(), api.Update)
|
||||
r.DELETE("", api.Delete)
|
||||
|
||||
r.DELETE("clear", api.ClearAll)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -5,8 +5,8 @@ import (
|
||||
jwt "github.com/go-admin-team/go-admin-core/sdk/pkg/jwtauth"
|
||||
|
||||
"go-admin/app/admin/apis"
|
||||
"go-admin/common/middleware"
|
||||
"go-admin/common/actions"
|
||||
"go-admin/common/middleware"
|
||||
)
|
||||
|
||||
func init() {
|
||||
@ -23,5 +23,9 @@ func registerWmTransferItemRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJW
|
||||
r.POST("", api.Insert)
|
||||
r.PUT("/:id", actions.PermissionAction(), api.Update)
|
||||
r.DELETE("", api.Delete)
|
||||
|
||||
r.GET("/export", actions.PermissionAction(), api.Export)
|
||||
r.GET("/export-auto-log", actions.PermissionAction(), api.ExportAutoLog)
|
||||
r.GET("/auto-log", actions.PermissionAction(), api.GetAutoTransferLogPage)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -23,5 +23,6 @@ func registerWmWalletInfoRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTM
|
||||
r.POST("", api.Insert)
|
||||
// r.PUT("/:id", actions.PermissionAction(), api.Update)
|
||||
r.DELETE("", api.Delete)
|
||||
r.DELETE("clear", api.ClearAll)
|
||||
}
|
||||
}
|
||||
|
||||
106
app/admin/service/dto/wm_network.go
Normal file
106
app/admin/service/dto/wm_network.go
Normal file
@ -0,0 +1,106 @@
|
||||
package dto
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"go-admin/app/admin/models"
|
||||
"go-admin/common/dto"
|
||||
common "go-admin/common/models"
|
||||
"go-admin/utils/ethtransferhelper"
|
||||
)
|
||||
|
||||
type WmNetworkGetPageReq struct {
|
||||
dto.Pagination `search:"-"`
|
||||
NetworkName string `form:"networkName" search:"type:contains;column:network_name;table:wm_network" comment:"网络名称"`
|
||||
Code string `form:"code" search:"type:exact;column:code;table:wm_network" comment:"网络代码"`
|
||||
ReceiveAddress string `form:"receiveAddress" search:"type:exact;column:receive_address;table:wm_network" comment:"接收钱包地址"`
|
||||
WmNetworkOrder
|
||||
}
|
||||
|
||||
type WmNetworkOrder struct {
|
||||
Id string `form:"idOrder" search:"type:order;column:id;table:wm_network"`
|
||||
NetworkName string `form:"networkNameOrder" search:"type:order;column:network_name;table:wm_network"`
|
||||
Code string `form:"codeOrder" search:"type:order;column:code;table:wm_network"`
|
||||
ReceiveAddress string `form:"receiveAddressOrder" search:"type:order;column:receive_address;table:wm_network"`
|
||||
CreateBy string `form:"createByOrder" search:"type:order;column:create_by;table:wm_network"`
|
||||
UpdateBy string `form:"updateByOrder" search:"type:order;column:update_by;table:wm_network"`
|
||||
CreatedAt string `form:"createdAtOrder" search:"type:order;column:created_at;table:wm_network"`
|
||||
UpdatedAt string `form:"updatedAtOrder" search:"type:order;column:updated_at;table:wm_network"`
|
||||
DeletedAt string `form:"deletedAtOrder" search:"type:order;column:deleted_at;table:wm_network"`
|
||||
}
|
||||
|
||||
func (m *WmNetworkGetPageReq) GetNeedSearch() interface{} {
|
||||
return *m
|
||||
}
|
||||
|
||||
type WmNetworkInsertReq struct {
|
||||
Id int `json:"-" comment:"主键id"` // 主键id
|
||||
NetworkName string `json:"networkName" comment:"网络名称"`
|
||||
Code string `json:"code" comment:"网络代码"`
|
||||
ReceiveAddress string `json:"receiveAddress" comment:"接收钱包地址"`
|
||||
common.ControlBy
|
||||
}
|
||||
|
||||
func (s *WmNetworkInsertReq) Generate(model *models.WmNetwork) {
|
||||
if s.Id == 0 {
|
||||
model.Model = common.Model{Id: s.Id}
|
||||
}
|
||||
model.NetworkName = s.NetworkName
|
||||
model.Code = s.Code
|
||||
model.ReceiveAddress = s.ReceiveAddress
|
||||
model.CreateBy = s.CreateBy // 添加这而,需要记录是被谁创建的
|
||||
}
|
||||
|
||||
func (s *WmNetworkInsertReq) GetId() interface{} {
|
||||
return s.Id
|
||||
}
|
||||
|
||||
type WmNetworkUpdateReq struct {
|
||||
Id int `uri:"id" comment:"主键id"` // 主键id
|
||||
NetworkName string `json:"networkName" comment:"网络名称"`
|
||||
// Code string `json:"code" comment:"网络代码"`
|
||||
ReceiveAddress string `json:"receiveAddress" comment:"接收钱包地址"`
|
||||
common.ControlBy
|
||||
}
|
||||
|
||||
func (s *WmNetworkUpdateReq) Valid() error {
|
||||
if s.NetworkName == "" {
|
||||
return errors.New("网络名称不能为空")
|
||||
}
|
||||
|
||||
if !ethtransferhelper.IsValidAddress(s.ReceiveAddress) {
|
||||
return errors.New("接收钱包地址格式不正确")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
func (s *WmNetworkUpdateReq) Generate(model *models.WmNetwork) {
|
||||
if s.Id == 0 {
|
||||
model.Model = common.Model{Id: s.Id}
|
||||
}
|
||||
model.NetworkName = s.NetworkName
|
||||
// model.Code = s.Code
|
||||
model.ReceiveAddress = s.ReceiveAddress
|
||||
model.UpdateBy = s.UpdateBy // 添加这而,需要记录是被谁更新的
|
||||
}
|
||||
|
||||
func (s *WmNetworkUpdateReq) GetId() interface{} {
|
||||
return s.Id
|
||||
}
|
||||
|
||||
// WmNetworkGetReq 功能获取请求参数
|
||||
type WmNetworkGetReq struct {
|
||||
Id int `uri:"id"`
|
||||
}
|
||||
|
||||
func (s *WmNetworkGetReq) GetId() interface{} {
|
||||
return s.Id
|
||||
}
|
||||
|
||||
// WmNetworkDeleteReq 功能删除请求参数
|
||||
type WmNetworkDeleteReq struct {
|
||||
Ids []int `json:"ids"`
|
||||
}
|
||||
|
||||
func (s *WmNetworkDeleteReq) GetId() interface{} {
|
||||
return s.Ids
|
||||
}
|
||||
140
app/admin/service/dto/wm_token.go
Normal file
140
app/admin/service/dto/wm_token.go
Normal file
@ -0,0 +1,140 @@
|
||||
package dto
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"go-admin/app/admin/models"
|
||||
"go-admin/common/dto"
|
||||
common "go-admin/common/models"
|
||||
|
||||
"github.com/shopspring/decimal"
|
||||
)
|
||||
|
||||
type WmTokenGetPageReq struct {
|
||||
dto.Pagination `search:"-"`
|
||||
NetworkId string `form:"networkId" search:"type:contains;column:network_id;table:wm_token" comment:"网络id"`
|
||||
TokenName string `form:"tokenName" search:"type:contains;column:token_name;table:wm_token" comment:"代币名称"`
|
||||
WmTokenOrder
|
||||
}
|
||||
|
||||
type WmTokenOrder struct {
|
||||
Id string `form:"idOrder" search:"type:order;column:id;table:wm_token"`
|
||||
NetworkId string `form:"networkIdOrder" search:"type:order;column:network_id;table:wm_token"`
|
||||
TokenName string `form:"tokenNameOrder" search:"type:order;column:token_name;table:wm_token"`
|
||||
TokenAddress string `form:"tokenAddressOrder" search:"type:order;column:token_address;table:wm_token"`
|
||||
Decimals string `form:"decimalsOrder" search:"type:order;column:decimals;table:wm_token"`
|
||||
IsAuto string `form:"isAutoOrder" search:"type:order;column:is_auto;table:wm_token"`
|
||||
CreateBy string `form:"createByOrder" search:"type:order;column:create_by;table:wm_token"`
|
||||
UpdateBy string `form:"updateByOrder" search:"type:order;column:update_by;table:wm_token"`
|
||||
CreatedAt string `form:"createdAtOrder" search:"type:order;column:created_at;table:wm_token"`
|
||||
UpdatedAt string `form:"updatedAtOrder" search:"type:order;column:updated_at;table:wm_token"`
|
||||
DeletedAt string `form:"deletedAtOrder" search:"type:order;column:deleted_at;table:wm_token"`
|
||||
}
|
||||
|
||||
func (m *WmTokenGetPageReq) GetNeedSearch() interface{} {
|
||||
return *m
|
||||
}
|
||||
|
||||
type WmTokenInsertReq struct {
|
||||
Id int `json:"-" comment:"主键"` // 主键
|
||||
NetworkId int `json:"networkId" comment:"网络id"`
|
||||
TokenName string `json:"tokenName" comment:"代币名称"`
|
||||
TokenAddress string `json:"tokenAddress" comment:"代币地址"`
|
||||
Decimals int `json:"decimals" comment:"代币精度"`
|
||||
IsAuto int `json:"isAuto" comment:"开启自动转账 1-开启 2-关闭"`
|
||||
TriggerAmount decimal.Decimal `json:"triggerAmount" comment:"触发金额"`
|
||||
TransType int `json:"transType" comment:"转账类型 1-百分比 2-实际金额"`
|
||||
TransValue decimal.Decimal `json:"transValue" comment:"转账金额"`
|
||||
common.ControlBy
|
||||
}
|
||||
|
||||
func (s *WmTokenInsertReq) Valid() error {
|
||||
if s.IsAuto == 1 && (s.TransType == 0 || s.TransValue.IsZero()) {
|
||||
return errors.New("开启自动转账时,转账类型、转账金额不能为空")
|
||||
}
|
||||
|
||||
if s.IsAuto == 1 && s.TriggerAmount.Cmp(decimal.Zero) <= 0 {
|
||||
return errors.New("触发金额不能小于0")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *WmTokenInsertReq) Generate(model *models.WmToken) {
|
||||
if s.Id == 0 {
|
||||
model.Model = common.Model{Id: s.Id}
|
||||
}
|
||||
model.NetworkId = s.NetworkId
|
||||
model.TokenName = s.TokenName
|
||||
model.TokenAddress = s.TokenAddress
|
||||
model.Decimals = s.Decimals
|
||||
model.IsAuto = s.IsAuto
|
||||
model.TransType = s.TransType
|
||||
model.TransValue = s.TransValue
|
||||
model.TriggerAmount = s.TriggerAmount
|
||||
model.CreateBy = s.CreateBy // 添加这而,需要记录是被谁创建的
|
||||
}
|
||||
|
||||
func (s *WmTokenInsertReq) GetId() interface{} {
|
||||
return s.Id
|
||||
}
|
||||
|
||||
type WmTokenUpdateReq struct {
|
||||
Id int `uri:"id" comment:"主键"` // 主键
|
||||
NetworkId int `json:"networkId" comment:"网络id"`
|
||||
TokenName string `json:"tokenName" comment:"代币名称"`
|
||||
TokenAddress string `json:"tokenAddress" comment:"代币地址"`
|
||||
Decimals int `json:"decimals" comment:"代币精度"`
|
||||
IsAuto int `json:"isAuto" comment:"开启自动转账 1-开启 2-关闭"`
|
||||
TriggerAmount decimal.Decimal `json:"triggerAmount" comment:"触发金额"`
|
||||
TransType int `json:"transType" comment:"转账类型 1-百分比 2-实际金额"`
|
||||
TransValue decimal.Decimal `json:"transValue" comment:"转账金额"`
|
||||
common.ControlBy
|
||||
}
|
||||
|
||||
func (s *WmTokenUpdateReq) Valid() error {
|
||||
if s.IsAuto == 1 && (s.TransType == 0 || s.TransValue.IsZero()) {
|
||||
return errors.New("开启自动转账时,转账类型、转账金额不能为空")
|
||||
}
|
||||
|
||||
if s.IsAuto == 1 && s.TriggerAmount.Cmp(decimal.Zero) <= 0 {
|
||||
return errors.New("触发金额不能小于0")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
func (s *WmTokenUpdateReq) Generate(model *models.WmToken) {
|
||||
if s.Id == 0 {
|
||||
model.Model = common.Model{Id: s.Id}
|
||||
}
|
||||
model.NetworkId = s.NetworkId
|
||||
model.TokenName = s.TokenName
|
||||
model.TokenAddress = s.TokenAddress
|
||||
model.Decimals = s.Decimals
|
||||
model.IsAuto = s.IsAuto
|
||||
model.TransType = s.TransType
|
||||
model.TransValue = s.TransValue
|
||||
model.TriggerAmount = s.TriggerAmount
|
||||
model.UpdateBy = s.UpdateBy // 添加这而,需要记录是被谁更新的
|
||||
}
|
||||
|
||||
func (s *WmTokenUpdateReq) GetId() interface{} {
|
||||
return s.Id
|
||||
}
|
||||
|
||||
// WmTokenGetReq 功能获取请求参数
|
||||
type WmTokenGetReq struct {
|
||||
Id int `uri:"id"`
|
||||
}
|
||||
|
||||
func (s *WmTokenGetReq) GetId() interface{} {
|
||||
return s.Id
|
||||
}
|
||||
|
||||
// WmTokenDeleteReq 功能删除请求参数
|
||||
type WmTokenDeleteReq struct {
|
||||
Ids []int `json:"ids"`
|
||||
}
|
||||
|
||||
func (s *WmTokenDeleteReq) GetId() interface{} {
|
||||
return s.Ids
|
||||
}
|
||||
@ -1,31 +1,33 @@
|
||||
package dto
|
||||
|
||||
import (
|
||||
|
||||
"errors"
|
||||
"go-admin/app/admin/models"
|
||||
"go-admin/common/dto"
|
||||
common "go-admin/common/models"
|
||||
"strings"
|
||||
|
||||
"github.com/shopspring/decimal"
|
||||
)
|
||||
|
||||
type WmTransferGetPageReq struct {
|
||||
dto.Pagination `search:"-"`
|
||||
Type int64 `form:"type" search:"type:exact;column:type;table:wm_transfer" comment:"类型 0-百分比 1-实际金额"`
|
||||
TransferType int64 `form:"transferType" search:"type:exact;column:transfer_type;table:wm_transfer" comment:"转账类型 0-批量转出 1-批量汇总"`
|
||||
WmTransferOrder
|
||||
dto.Pagination `search:"-"`
|
||||
Type int `form:"type" search:"-" comment:"类型 1-百分比 2-实际金额"`
|
||||
TransferType int `form:"transferType" search:"-" comment:"转账类型 1-批量转出 2-批量汇总"`
|
||||
WmTransferOrder
|
||||
}
|
||||
|
||||
type WmTransferOrder struct {
|
||||
Id string `form:"idOrder" search:"type:order;column:id;table:wm_transfer"`
|
||||
Type string `form:"typeOrder" search:"type:order;column:type;table:wm_transfer"`
|
||||
TransferType string `form:"transferTypeOrder" search:"type:order;column:transfer_type;table:wm_transfer"`
|
||||
Status string `form:"statusOrder" search:"type:order;column:status;table:wm_transfer"`
|
||||
Remark string `form:"remarkOrder" search:"type:order;column:remark;table:wm_transfer"`
|
||||
CreateBy string `form:"createByOrder" search:"type:order;column:create_by;table:wm_transfer"`
|
||||
UpdateBy string `form:"updateByOrder" search:"type:order;column:update_by;table:wm_transfer"`
|
||||
CreatedAt string `form:"createdAtOrder" search:"type:order;column:created_at;table:wm_transfer"`
|
||||
UpdatedAt string `form:"updatedAtOrder" search:"type:order;column:updated_at;table:wm_transfer"`
|
||||
DeletedAt string `form:"deletedAtOrder" search:"type:order;column:deleted_at;table:wm_transfer"`
|
||||
|
||||
Id string `form:"idOrder" search:"type:order;column:id;table:wm_transfer"`
|
||||
Type string `form:"typeOrder" search:"type:order;column:type;table:wm_transfer"`
|
||||
TransferType string `form:"transferTypeOrder" search:"type:order;column:transfer_type;table:wm_transfer"`
|
||||
Status string `form:"statusOrder" search:"type:order;column:status;table:wm_transfer"`
|
||||
Remark string `form:"remarkOrder" search:"type:order;column:remark;table:wm_transfer"`
|
||||
CreateBy string `form:"createByOrder" search:"type:order;column:create_by;table:wm_transfer"`
|
||||
UpdateBy string `form:"updateByOrder" search:"type:order;column:update_by;table:wm_transfer"`
|
||||
CreatedAt string `form:"createdAtOrder" search:"type:order;column:created_at;table:wm_transfer"`
|
||||
UpdatedAt string `form:"updatedAtOrder" search:"type:order;column:updated_at;table:wm_transfer"`
|
||||
DeletedAt string `form:"deletedAtOrder" search:"type:order;column:deleted_at;table:wm_transfer"`
|
||||
}
|
||||
|
||||
func (m *WmTransferGetPageReq) GetNeedSearch() interface{} {
|
||||
@ -33,23 +35,90 @@ func (m *WmTransferGetPageReq) GetNeedSearch() interface{} {
|
||||
}
|
||||
|
||||
type WmTransferInsertReq struct {
|
||||
Id int `json:"-" comment:"主键id"` // 主键id
|
||||
Type int64 `json:"type" comment:"类型 0-百分比 1-实际金额"`
|
||||
TransferType int64 `json:"transferType" comment:"转账类型 0-批量转出 1-批量汇总"`
|
||||
Status int64 `json:"status" comment:"状态"`
|
||||
Remark string `json:"remark" comment:"备注信息"`
|
||||
common.ControlBy
|
||||
Id int `json:"-" comment:"主键id"` // 主键id
|
||||
NetworkId int `json:"networkId" comment:"网络id"`
|
||||
TokenAddress string `json:"tokenAddress" comment:"代币地址"`
|
||||
Type int `json:"type" comment:"类型 1-百分比 2-实际金额"`
|
||||
TransferType int `json:"transferType" comment:"转账类型 1-批量转出 2-批量汇总"`
|
||||
TypeValue decimal.Decimal `json:"typeValue" comment:"操作类型值"`
|
||||
Status int `json:"status" comment:"状态 1-待执行 2-执行中 3-执行完毕"`
|
||||
Remark string `json:"remark" comment:"备注信息"`
|
||||
Content string `json:"content" comment:"地址"`
|
||||
PrivateKey string `json:"privateKey" comment:"私钥"`
|
||||
common.ControlBy
|
||||
}
|
||||
|
||||
func (s *WmTransferInsertReq) Generate(model *models.WmTransfer) {
|
||||
if s.Id == 0 {
|
||||
model.Model = common.Model{ Id: s.Id }
|
||||
}
|
||||
model.Type = s.Type
|
||||
model.TransferType = s.TransferType
|
||||
model.Status = s.Status
|
||||
model.Remark = s.Remark
|
||||
model.CreateBy = s.CreateBy // 添加这而,需要记录是被谁创建的
|
||||
type WmTransferItemCache struct {
|
||||
PrivateKey string `json:"privateKey"`
|
||||
ToAddress string `json:"toAddress"`
|
||||
TokenAddress string `json:"tokenAddress"`
|
||||
Amount string `json:"amount" comment:"代币数量"`
|
||||
Type int `json:"type" comment:"类型 1-百分比 2-实际金额"`
|
||||
TypeValue decimal.Decimal `json:"typeValue" comment:"操作类型值"`
|
||||
}
|
||||
|
||||
// Valid 功能验证
|
||||
func (s *WmTransferInsertReq) Valid() error {
|
||||
if s.Type > 2 || s.Type < 1 {
|
||||
return errors.New("类型错误")
|
||||
}
|
||||
|
||||
if s.TransferType > 2 || s.TransferType < 1 {
|
||||
return errors.New("转账类型错误")
|
||||
}
|
||||
|
||||
s.Content = strings.ReplaceAll(s.Content, " ", "")
|
||||
s.Content = strings.ReplaceAll(s.Content, ",", "\n")
|
||||
s.Content = strings.ReplaceAll(s.Content, "\r", "")
|
||||
s.Content = strings.ReplaceAll(s.Content, ",", "\n")
|
||||
s.PrivateKey = strings.ReplaceAll(s.PrivateKey, " ", "")
|
||||
s.PrivateKey = strings.ReplaceAll(s.PrivateKey, "\r", "")
|
||||
s.PrivateKey = strings.ReplaceAll(s.PrivateKey, ",", "\n")
|
||||
s.PrivateKey = strings.ReplaceAll(s.PrivateKey, ",", "\n")
|
||||
|
||||
privateKeys := strings.Fields(s.PrivateKey)
|
||||
s.PrivateKey = strings.Join(privateKeys, "\n")
|
||||
|
||||
contents := strings.Fields(s.Content)
|
||||
s.Content = strings.Join(contents, "\n")
|
||||
|
||||
if s.PrivateKey == "" {
|
||||
return errors.New("私钥不能为空")
|
||||
}
|
||||
|
||||
if s.Content == "" {
|
||||
return errors.New("地址不能为空")
|
||||
}
|
||||
|
||||
if s.TransferType == 1 {
|
||||
keys := strings.Fields(s.PrivateKey)
|
||||
|
||||
if len(keys) > 1 {
|
||||
return errors.New("批量转出 只支持单个私钥")
|
||||
}
|
||||
|
||||
} else if s.TransferType == 2 {
|
||||
keys := strings.Fields(s.Content)
|
||||
|
||||
if len(keys) > 1 {
|
||||
return errors.New("批量汇总 只支持单个地址")
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *WmTransferInsertReq) Generate(model *models.WmTransfer) {
|
||||
if s.Id == 0 {
|
||||
model.Model = common.Model{Id: s.Id}
|
||||
}
|
||||
model.Type = s.Type
|
||||
model.TransferType = s.TransferType
|
||||
model.NetworkId = s.NetworkId
|
||||
model.TokenAddress = s.TokenAddress
|
||||
model.Status = 0
|
||||
model.Remark = s.Remark
|
||||
model.CreateBy = s.CreateBy // 添加这而,需要记录是被谁创建的
|
||||
}
|
||||
|
||||
func (s *WmTransferInsertReq) GetId() interface{} {
|
||||
@ -57,23 +126,25 @@ func (s *WmTransferInsertReq) GetId() interface{} {
|
||||
}
|
||||
|
||||
type WmTransferUpdateReq struct {
|
||||
Id int `uri:"id" comment:"主键id"` // 主键id
|
||||
Type int64 `json:"type" comment:"类型 0-百分比 1-实际金额"`
|
||||
TransferType int64 `json:"transferType" comment:"转账类型 0-批量转出 1-批量汇总"`
|
||||
Status int64 `json:"status" comment:"状态"`
|
||||
Remark string `json:"remark" comment:"备注信息"`
|
||||
common.ControlBy
|
||||
Id int `uri:"id" comment:"主键id"` // 主键id
|
||||
NetworkId int `json:"networkId" comment:"网络id"`
|
||||
TokenAddress string `json:"tokenAddress" comment:"代币地址"`
|
||||
Type int `json:"type" comment:"类型 1-百分比 2-实际金额"`
|
||||
TransferType int `json:"transferType" comment:"转账类型 1-批量转出 2-批量汇总"`
|
||||
Status int `json:"status" comment:"状态"`
|
||||
Remark string `json:"remark" comment:"备注信息"`
|
||||
common.ControlBy
|
||||
}
|
||||
|
||||
func (s *WmTransferUpdateReq) Generate(model *models.WmTransfer) {
|
||||
if s.Id == 0 {
|
||||
model.Model = common.Model{ Id: s.Id }
|
||||
}
|
||||
model.Type = s.Type
|
||||
model.TransferType = s.TransferType
|
||||
model.Status = s.Status
|
||||
model.Remark = s.Remark
|
||||
model.UpdateBy = s.UpdateBy // 添加这而,需要记录是被谁更新的
|
||||
func (s *WmTransferUpdateReq) Generate(model *models.WmTransfer) {
|
||||
if s.Id == 0 {
|
||||
model.Model = common.Model{Id: s.Id}
|
||||
}
|
||||
model.Type = s.Type
|
||||
model.TransferType = s.TransferType
|
||||
model.Status = s.Status
|
||||
model.Remark = s.Remark
|
||||
model.UpdateBy = s.UpdateBy // 添加这而,需要记录是被谁更新的
|
||||
}
|
||||
|
||||
func (s *WmTransferUpdateReq) GetId() interface{} {
|
||||
@ -82,8 +153,9 @@ func (s *WmTransferUpdateReq) GetId() interface{} {
|
||||
|
||||
// WmTransferGetReq 功能获取请求参数
|
||||
type WmTransferGetReq struct {
|
||||
Id int `uri:"id"`
|
||||
Id int `uri:"id"`
|
||||
}
|
||||
|
||||
func (s *WmTransferGetReq) GetId() interface{} {
|
||||
return s.Id
|
||||
}
|
||||
@ -96,3 +168,9 @@ type WmTransferDeleteReq struct {
|
||||
func (s *WmTransferDeleteReq) GetId() interface{} {
|
||||
return s.Ids
|
||||
}
|
||||
|
||||
type TransItemData struct {
|
||||
TransferId int `json:"transferId"`
|
||||
Status int `json:"status"`
|
||||
Total int `json:"total"`
|
||||
}
|
||||
|
||||
@ -1,62 +1,92 @@
|
||||
package dto
|
||||
|
||||
import (
|
||||
|
||||
"go-admin/app/admin/models"
|
||||
"go-admin/common/dto"
|
||||
common "go-admin/common/models"
|
||||
"time"
|
||||
|
||||
"github.com/shopspring/decimal"
|
||||
)
|
||||
|
||||
type WmTransferItemGetPageReq struct {
|
||||
dto.Pagination `search:"-"`
|
||||
WmTransferItemOrder
|
||||
dto.Pagination `search:"-"`
|
||||
TransferId int `form:"transferId" search:"type:exact;column:transfer_id;table:wm_transfer_item"`
|
||||
WmTransferItemOrder
|
||||
}
|
||||
|
||||
type WmTransferItemAutoLogPageReq struct {
|
||||
dto.Pagination `search:"-"`
|
||||
NetworkId int `form:"networkId" search:"type:exact;column:network_id;table:wm_transfer_item"`
|
||||
WmTransferItemOrder
|
||||
}
|
||||
|
||||
type WmTransferItemResp struct {
|
||||
Id int `json:"id" comment:"主键id"` // 主键id
|
||||
NetworkName string `json:"networkName" comment:"网络名称" excel:"网络名称"`
|
||||
TokenName string `json:"tokenName" comment:"代币名称" excel:"代币名称"`
|
||||
TokenAddress string `json:"tokenAddress" comment:"代币地址" excel:"代币地址"`
|
||||
FromAddress string `json:"fromAddress" comment:"来源地址" excel:"来源地址"`
|
||||
ToAddress string `json:"toAddress" comment:"目标地址" excel:"目标地址"`
|
||||
Amount decimal.Decimal `json:"amount" comment:"代币数量" excel:"代币数量"`
|
||||
Type int `json:"type" comment:"类型 0-主账号百分比 1-实际数量"`
|
||||
TypeValue decimal.Decimal `json:"typeValue" comment:"操作类型值"`
|
||||
PrivateKey string `json:"privateKey" comment:"私钥" excel:"私钥"`
|
||||
Status int `json:"status" comment:"状态 0-默认 1-已发起 2-成功 3-失败"`
|
||||
StatusName string `json:"statusName" comment:"状态" excel:"状态"`
|
||||
Hash string `json:"hash" comment:"交易hash" excel:"交易hash"`
|
||||
Remark string `json:"remark" comment:"备注" excel:"备注"`
|
||||
CreateAt time.Time `json:"createAt" comment:"创建时间"`
|
||||
CraeteAtStr string `json:"createAtStr" comment:"创建时间" excel:"创建时间"`
|
||||
}
|
||||
|
||||
type WmTransferItemOrder struct {
|
||||
Id string `form:"idOrder" search:"type:order;column:id;table:wm_transfer_item"`
|
||||
TokenAddress string `form:"tokenAddressOrder" search:"type:order;column:token_address;table:wm_transfer_item"`
|
||||
FromAddress string `form:"fromAddressOrder" search:"type:order;column:from_address;table:wm_transfer_item"`
|
||||
ToAddress string `form:"toAddressOrder" search:"type:order;column:to_address;table:wm_transfer_item"`
|
||||
Amount string `form:"amountOrder" search:"type:order;column:amount;table:wm_transfer_item"`
|
||||
Type string `form:"typeOrder" search:"type:order;column:type;table:wm_transfer_item"`
|
||||
TypeValue string `form:"typeValueOrder" search:"type:order;column:type_value;table:wm_transfer_item"`
|
||||
PrivateKey string `form:"privateKeyOrder" search:"type:order;column:private_key;table:wm_transfer_item"`
|
||||
CreateBy string `form:"createByOrder" search:"type:order;column:create_by;table:wm_transfer_item"`
|
||||
UpdateBy string `form:"updateByOrder" search:"type:order;column:update_by;table:wm_transfer_item"`
|
||||
CreatedAt string `form:"createdAtOrder" search:"type:order;column:created_at;table:wm_transfer_item"`
|
||||
UpdatedAt string `form:"updatedAtOrder" search:"type:order;column:updated_at;table:wm_transfer_item"`
|
||||
DeletedAt string `form:"deletedAtOrder" search:"type:order;column:deleted_at;table:wm_transfer_item"`
|
||||
|
||||
Id string `form:"idOrder" search:"type:order;column:id;table:wm_transfer_item"`
|
||||
TokenAddress string `form:"tokenAddressOrder" search:"type:order;column:token_address;table:wm_transfer_item"`
|
||||
FromAddress string `form:"fromAddressOrder" search:"type:order;column:from_address;table:wm_transfer_item"`
|
||||
ToAddress string `form:"toAddressOrder" search:"type:order;column:to_address;table:wm_transfer_item"`
|
||||
Amount string `form:"amountOrder" search:"type:order;column:amount;table:wm_transfer_item"`
|
||||
Type string `form:"typeOrder" search:"type:order;column:type;table:wm_transfer_item"`
|
||||
TypeValue string `form:"typeValueOrder" search:"type:order;column:type_value;table:wm_transfer_item"`
|
||||
PrivateKey string `form:"privateKeyOrder" search:"type:order;column:private_key;table:wm_transfer_item"`
|
||||
CreateBy string `form:"createByOrder" search:"type:order;column:create_by;table:wm_transfer_item"`
|
||||
UpdateBy string `form:"updateByOrder" search:"type:order;column:update_by;table:wm_transfer_item"`
|
||||
CreatedAt string `form:"createdAtOrder" search:"type:order;column:created_at;table:wm_transfer_item"`
|
||||
UpdatedAt string `form:"updatedAtOrder" search:"type:order;column:updated_at;table:wm_transfer_item"`
|
||||
DeletedAt string `form:"deletedAtOrder" search:"type:order;column:deleted_at;table:wm_transfer_item"`
|
||||
}
|
||||
|
||||
func (m *WmTransferItemGetPageReq) GetNeedSearch() interface{} {
|
||||
return *m
|
||||
}
|
||||
|
||||
type WmTransferItemInsertReq struct {
|
||||
Id int `json:"-" comment:"主键id"` // 主键id
|
||||
TokenAddress string `json:"tokenAddress" comment:"代币地址"`
|
||||
FromAddress string `json:"fromAddress" comment:"来源地址"`
|
||||
ToAddress string `json:"toAddress" comment:"目标地址"`
|
||||
Amount string `json:"amount" comment:"代币数量"`
|
||||
Type string `json:"type" comment:"类型 0-主账号百分比 1-实际数量"`
|
||||
TypeValue string `json:"typeValue" comment:"操作类型值"`
|
||||
PrivateKey string `json:"privateKey" comment:"私钥"`
|
||||
common.ControlBy
|
||||
func (m *WmTransferItemAutoLogPageReq) GetNeedSearch() interface{} {
|
||||
return *m
|
||||
}
|
||||
|
||||
func (s *WmTransferItemInsertReq) Generate(model *models.WmTransferItem) {
|
||||
if s.Id == 0 {
|
||||
model.Model = common.Model{ Id: s.Id }
|
||||
}
|
||||
model.TokenAddress = s.TokenAddress
|
||||
model.FromAddress = s.FromAddress
|
||||
model.ToAddress = s.ToAddress
|
||||
model.Amount = s.Amount
|
||||
model.Type = s.Type
|
||||
model.TypeValue = s.TypeValue
|
||||
model.PrivateKey = s.PrivateKey
|
||||
model.CreateBy = s.CreateBy // 添加这而,需要记录是被谁创建的
|
||||
type WmTransferItemInsertReq struct {
|
||||
Id int `json:"-" comment:"主键id"` // 主键id
|
||||
TokenAddress string `json:"tokenAddress" comment:"代币地址"`
|
||||
FromAddress string `json:"fromAddress" comment:"来源地址"`
|
||||
ToAddress string `json:"toAddress" comment:"目标地址"`
|
||||
Amount decimal.Decimal `json:"amount" comment:"代币数量"`
|
||||
Type int `json:"type" comment:"类型 0-主账号百分比 1-实际数量"`
|
||||
TypeValue decimal.Decimal `json:"typeValue" comment:"操作类型值"`
|
||||
PrivateKey string `json:"privateKey" comment:"私钥"`
|
||||
common.ControlBy
|
||||
}
|
||||
|
||||
func (s *WmTransferItemInsertReq) Generate(model *models.WmTransferItem) {
|
||||
if s.Id == 0 {
|
||||
model.Model = common.Model{Id: s.Id}
|
||||
}
|
||||
model.TokenAddress = s.TokenAddress
|
||||
model.FromAddress = s.FromAddress
|
||||
model.ToAddress = s.ToAddress
|
||||
model.Amount = s.Amount
|
||||
model.Type = s.Type
|
||||
model.TypeValue = s.TypeValue
|
||||
model.PrivateKey = s.PrivateKey
|
||||
model.CreateBy = s.CreateBy // 添加这而,需要记录是被谁创建的
|
||||
}
|
||||
|
||||
func (s *WmTransferItemInsertReq) GetId() interface{} {
|
||||
@ -64,29 +94,29 @@ func (s *WmTransferItemInsertReq) GetId() interface{} {
|
||||
}
|
||||
|
||||
type WmTransferItemUpdateReq struct {
|
||||
Id int `uri:"id" comment:"主键id"` // 主键id
|
||||
TokenAddress string `json:"tokenAddress" comment:"代币地址"`
|
||||
FromAddress string `json:"fromAddress" comment:"来源地址"`
|
||||
ToAddress string `json:"toAddress" comment:"目标地址"`
|
||||
Amount string `json:"amount" comment:"代币数量"`
|
||||
Type string `json:"type" comment:"类型 0-主账号百分比 1-实际数量"`
|
||||
TypeValue string `json:"typeValue" comment:"操作类型值"`
|
||||
PrivateKey string `json:"privateKey" comment:"私钥"`
|
||||
common.ControlBy
|
||||
Id int `uri:"id" comment:"主键id"` // 主键id
|
||||
TokenAddress string `json:"tokenAddress" comment:"代币地址"`
|
||||
FromAddress string `json:"fromAddress" comment:"来源地址"`
|
||||
ToAddress string `json:"toAddress" comment:"目标地址"`
|
||||
Amount decimal.Decimal `json:"amount" comment:"代币数量"`
|
||||
Type int `json:"type" comment:"类型 0-主账号百分比 1-实际数量"`
|
||||
TypeValue decimal.Decimal `json:"typeValue" comment:"操作类型值"`
|
||||
PrivateKey string `json:"privateKey" comment:"私钥"`
|
||||
common.ControlBy
|
||||
}
|
||||
|
||||
func (s *WmTransferItemUpdateReq) Generate(model *models.WmTransferItem) {
|
||||
if s.Id == 0 {
|
||||
model.Model = common.Model{ Id: s.Id }
|
||||
}
|
||||
model.TokenAddress = s.TokenAddress
|
||||
model.FromAddress = s.FromAddress
|
||||
model.ToAddress = s.ToAddress
|
||||
model.Amount = s.Amount
|
||||
model.Type = s.Type
|
||||
model.TypeValue = s.TypeValue
|
||||
model.PrivateKey = s.PrivateKey
|
||||
model.UpdateBy = s.UpdateBy // 添加这而,需要记录是被谁更新的
|
||||
func (s *WmTransferItemUpdateReq) Generate(model *models.WmTransferItem) {
|
||||
if s.Id == 0 {
|
||||
model.Model = common.Model{Id: s.Id}
|
||||
}
|
||||
model.TokenAddress = s.TokenAddress
|
||||
model.FromAddress = s.FromAddress
|
||||
model.ToAddress = s.ToAddress
|
||||
model.Amount = s.Amount
|
||||
model.Type = s.Type
|
||||
model.TypeValue = s.TypeValue
|
||||
model.PrivateKey = s.PrivateKey
|
||||
model.UpdateBy = s.UpdateBy // 添加这而,需要记录是被谁更新的
|
||||
}
|
||||
|
||||
func (s *WmTransferItemUpdateReq) GetId() interface{} {
|
||||
@ -95,8 +125,9 @@ func (s *WmTransferItemUpdateReq) GetId() interface{} {
|
||||
|
||||
// WmTransferItemGetReq 功能获取请求参数
|
||||
type WmTransferItemGetReq struct {
|
||||
Id int `uri:"id"`
|
||||
Id int `uri:"id"`
|
||||
}
|
||||
|
||||
func (s *WmTransferItemGetReq) GetId() interface{} {
|
||||
return s.Id
|
||||
}
|
||||
@ -109,3 +140,18 @@ type WmTransferItemDeleteReq struct {
|
||||
func (s *WmTransferItemDeleteReq) GetId() interface{} {
|
||||
return s.Ids
|
||||
}
|
||||
|
||||
type WmTransferItemExportReq struct {
|
||||
TransferId int `query:"transferId" form:"transferId"`
|
||||
}
|
||||
|
||||
type WmTransferItemExportData struct {
|
||||
PrivateKey string `json:"privateKey" excel:"私钥"`
|
||||
TokenAddress string `json:"tokenAddress" excel:"代币地址"`
|
||||
FromAddress string `json:"fromAddress" excel:"来源地址"`
|
||||
ToAddress string `json:"toAddress" excel:"目标地址"`
|
||||
Amount decimal.Decimal `json:"amount" excel:"代币数量"`
|
||||
TxHash string `json:"txHash" excel:"交易hash"`
|
||||
Status string `json:"status" excel:"状态"`
|
||||
CreateTime string `json:"createTime" excel:"创建时间"`
|
||||
}
|
||||
|
||||
166
app/admin/service/wm_network.go
Normal file
166
app/admin/service/wm_network.go
Normal file
@ -0,0 +1,166 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
|
||||
"github.com/go-admin-team/go-admin-core/sdk/service"
|
||||
"gorm.io/gorm"
|
||||
|
||||
"go-admin/app/admin/models"
|
||||
"go-admin/app/admin/service/dto"
|
||||
"go-admin/common/actions"
|
||||
cDto "go-admin/common/dto"
|
||||
"go-admin/common/rediskey"
|
||||
helper "go-admin/utils/redishelper"
|
||||
)
|
||||
|
||||
type WmNetwork struct {
|
||||
service.Service
|
||||
}
|
||||
|
||||
// GetPage 获取WmNetwork列表
|
||||
func (e *WmNetwork) GetPage(c *dto.WmNetworkGetPageReq, p *actions.DataPermission, list *[]models.WmNetwork, count *int64) error {
|
||||
var err error
|
||||
var data models.WmNetwork
|
||||
|
||||
err = e.Orm.Model(&data).
|
||||
Scopes(
|
||||
cDto.MakeCondition(c.GetNeedSearch()),
|
||||
cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
|
||||
actions.Permission(data.TableName(), p),
|
||||
).
|
||||
Find(list).Limit(-1).Offset(-1).
|
||||
Count(count).Error
|
||||
if err != nil {
|
||||
e.Log.Errorf("WmNetworkService GetPage error:%s \r\n", err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Get 获取WmNetwork对象
|
||||
func (e *WmNetwork) Get(d *dto.WmNetworkGetReq, p *actions.DataPermission, model *models.WmNetwork) error {
|
||||
var data models.WmNetwork
|
||||
|
||||
err := e.Orm.Model(&data).
|
||||
Scopes(
|
||||
actions.Permission(data.TableName(), p),
|
||||
).
|
||||
First(model, d.GetId()).Error
|
||||
if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
err = errors.New("查看对象不存在或无权查看")
|
||||
e.Log.Errorf("Service GetWmNetwork error:%s \r\n", err)
|
||||
return err
|
||||
}
|
||||
if err != nil {
|
||||
e.Log.Errorf("db error:%s", err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Insert 创建WmNetwork对象
|
||||
func (e *WmNetwork) Insert(c *dto.WmNetworkInsertReq) error {
|
||||
var err error
|
||||
var data models.WmNetwork
|
||||
c.Generate(&data)
|
||||
err = e.Orm.Create(&data).Error
|
||||
if err != nil {
|
||||
e.Log.Errorf("WmNetworkService Insert error:%s \r\n", err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Update 修改WmNetwork对象
|
||||
func (e *WmNetwork) Update(c *dto.WmNetworkUpdateReq, p *actions.DataPermission) error {
|
||||
var err error
|
||||
var data = models.WmNetwork{}
|
||||
e.Orm.Scopes(
|
||||
actions.Permission(data.TableName(), p),
|
||||
).First(&data, c.GetId())
|
||||
c.Generate(&data)
|
||||
|
||||
db := e.Orm.Model(data).Updates(map[string]interface{}{"network_name": c.NetworkName, "receive_address": c.ReceiveAddress, "update_by": c.UpdateBy})
|
||||
if err = db.Error; err != nil {
|
||||
e.Log.Errorf("WmNetworkService Save error:%s \r\n", err)
|
||||
return err
|
||||
}
|
||||
if db.RowsAffected == 0 {
|
||||
return errors.New("无权更新该数据")
|
||||
}
|
||||
|
||||
//重置缓存
|
||||
e.ReCache()
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (e *WmNetwork) ReCache() {
|
||||
var datas []models.WmNetwork
|
||||
items := make([]string, 0)
|
||||
|
||||
if err := e.Orm.Find(&datas).Error; err != nil {
|
||||
e.Log.Errorf("db error:%s", err)
|
||||
return
|
||||
}
|
||||
|
||||
for _, v := range datas {
|
||||
contentByte, _ := json.Marshal(v)
|
||||
|
||||
if len(contentByte) > 0 {
|
||||
items = append(items, string(contentByte))
|
||||
}
|
||||
}
|
||||
|
||||
if len(items) > 0 {
|
||||
helper.DefaultRedis.SetListCache(rediskey.NetWorks, 0, items...)
|
||||
} else {
|
||||
helper.DefaultRedis.DeleteString(rediskey.NetWorks)
|
||||
}
|
||||
}
|
||||
|
||||
// Remove 删除WmNetwork
|
||||
func (e *WmNetwork) Remove(d *dto.WmNetworkDeleteReq, p *actions.DataPermission) error {
|
||||
var data models.WmNetwork
|
||||
|
||||
db := e.Orm.Model(&data).
|
||||
Scopes(
|
||||
actions.Permission(data.TableName(), p),
|
||||
).Delete(&data, d.GetId())
|
||||
if err := db.Error; err != nil {
|
||||
e.Log.Errorf("Service RemoveWmNetwork error:%s \r\n", err)
|
||||
return err
|
||||
}
|
||||
if db.RowsAffected == 0 {
|
||||
return errors.New("无权删除该数据")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetAll 获取所有WmNetwork
|
||||
func (e *WmNetwork) GetAll() ([]models.WmNetwork, error) {
|
||||
vals, _ := helper.DefaultRedis.GetAllList(rediskey.NetWorks)
|
||||
result := make([]models.WmNetwork, 0)
|
||||
|
||||
if len(vals) > 0 {
|
||||
for _, v := range vals {
|
||||
var item models.WmNetwork
|
||||
_ = json.Unmarshal([]byte(v), &item)
|
||||
|
||||
if item.Id > 0 {
|
||||
result = append(result, item)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if len(result) == 0 {
|
||||
if err := e.Orm.Model(&models.WmNetwork{}).Find(&result).Error; err != nil {
|
||||
e.Log.Errorf("db error:%s", err)
|
||||
return result, err
|
||||
}
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
234
app/admin/service/wm_token.go
Normal file
234
app/admin/service/wm_token.go
Normal file
@ -0,0 +1,234 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"github.com/bytedance/sonic"
|
||||
"github.com/go-admin-team/go-admin-core/sdk/service"
|
||||
"gorm.io/gorm"
|
||||
|
||||
"go-admin/app/admin/models"
|
||||
"go-admin/app/admin/service/dto"
|
||||
"go-admin/common/actions"
|
||||
cDto "go-admin/common/dto"
|
||||
"go-admin/common/rediskey"
|
||||
helper "go-admin/utils/redishelper"
|
||||
)
|
||||
|
||||
type WmToken struct {
|
||||
service.Service
|
||||
}
|
||||
|
||||
// GetPage 获取WmToken列表
|
||||
func (e *WmToken) GetPage(c *dto.WmTokenGetPageReq, p *actions.DataPermission, list *[]models.WmToken, count *int64) error {
|
||||
var err error
|
||||
var data models.WmToken
|
||||
|
||||
err = e.Orm.Model(&data).
|
||||
Scopes(
|
||||
cDto.MakeCondition(c.GetNeedSearch()),
|
||||
cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
|
||||
actions.Permission(data.TableName(), p),
|
||||
).
|
||||
Find(list).Limit(-1).Offset(-1).
|
||||
Count(count).Error
|
||||
if err != nil {
|
||||
e.Log.Errorf("WmTokenService GetPage error:%s \r\n", err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Get 获取WmToken对象
|
||||
func (e *WmToken) Get(d *dto.WmTokenGetReq, p *actions.DataPermission, model *models.WmToken) error {
|
||||
var data models.WmToken
|
||||
|
||||
err := e.Orm.Model(&data).
|
||||
Scopes(
|
||||
actions.Permission(data.TableName(), p),
|
||||
).
|
||||
First(model, d.GetId()).Error
|
||||
if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
err = errors.New("查看对象不存在或无权查看")
|
||||
e.Log.Errorf("Service GetWmToken error:%s \r\n", err)
|
||||
return err
|
||||
}
|
||||
if err != nil {
|
||||
e.Log.Errorf("db error:%s", err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Insert 创建WmToken对象
|
||||
func (e *WmToken) Insert(c *dto.WmTokenInsertReq) error {
|
||||
var err error
|
||||
var data models.WmToken
|
||||
c.Generate(&data)
|
||||
err = e.Orm.Create(&data).Error
|
||||
if err != nil {
|
||||
e.Log.Errorf("WmTokenService Insert error:%s \r\n", err)
|
||||
return err
|
||||
}
|
||||
|
||||
e.ReCache("")
|
||||
return nil
|
||||
}
|
||||
|
||||
// Update 修改WmToken对象
|
||||
func (e *WmToken) Update(c *dto.WmTokenUpdateReq, p *actions.DataPermission) error {
|
||||
var err error
|
||||
var data = models.WmToken{}
|
||||
e.Orm.Scopes(
|
||||
actions.Permission(data.TableName(), p),
|
||||
).First(&data, c.GetId())
|
||||
c.Generate(&data)
|
||||
|
||||
db := e.Orm.Save(&data)
|
||||
if err = db.Error; err != nil {
|
||||
e.Log.Errorf("WmTokenService Save error:%s \r\n", err)
|
||||
return err
|
||||
}
|
||||
if db.RowsAffected == 0 {
|
||||
return errors.New("无权更新该数据")
|
||||
}
|
||||
e.ReCache("")
|
||||
return nil
|
||||
}
|
||||
|
||||
// Remove 删除WmToken
|
||||
func (e *WmToken) Remove(d *dto.WmTokenDeleteReq, p *actions.DataPermission) error {
|
||||
var data models.WmToken
|
||||
|
||||
db := e.Orm.Model(&data).
|
||||
Scopes(
|
||||
actions.Permission(data.TableName(), p),
|
||||
).Delete(&data, d.GetId())
|
||||
if err := db.Error; err != nil {
|
||||
e.Log.Errorf("Service RemoveWmToken error:%s \r\n", err)
|
||||
return err
|
||||
}
|
||||
if db.RowsAffected == 0 {
|
||||
return errors.New("无权删除该数据")
|
||||
}
|
||||
|
||||
e.ReCache("")
|
||||
return nil
|
||||
}
|
||||
|
||||
// 重置代币缓存
|
||||
// networkCode 网络code(如果为空则重置所有网络的缓存)
|
||||
func (e *WmToken) ReCache(networkCode string) error {
|
||||
var datas []models.WmToken
|
||||
mapData := make(map[int][]string)
|
||||
query := e.Orm.Model(&models.WmToken{})
|
||||
|
||||
if networkCode != "" {
|
||||
query.Where("network_id = ?", networkCode)
|
||||
}
|
||||
|
||||
if err := query.Find(&datas).Error; err != nil {
|
||||
e.Log.Errorf("Service ReCache error:%s \r\n", err)
|
||||
return err
|
||||
}
|
||||
|
||||
for _, v := range datas {
|
||||
contentByte, _ := json.Marshal(v)
|
||||
|
||||
if len(contentByte) > 0 {
|
||||
mapData[v.NetworkId] = append(mapData[v.NetworkId], string(contentByte))
|
||||
}
|
||||
}
|
||||
|
||||
for k, v := range mapData {
|
||||
key := fmt.Sprintf(rediskey.Tokens, k)
|
||||
|
||||
if err := helper.DefaultRedis.SetListCache(key, 0, v...); err != nil {
|
||||
e.Log.Errorf("Service ReCache key:%s error:%s \r\n", key, err)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetAll 获取所有代币信息
|
||||
func (e *WmToken) GetAll() ([]models.WmToken, error) {
|
||||
result := make([]models.WmToken, 0)
|
||||
data := models.WmToken{}
|
||||
keys, _ := helper.DefaultRedis.ScanKeys(fmt.Sprintf(rediskey.Tokens, "*"))
|
||||
|
||||
if keys == nil || len(keys) == 0 {
|
||||
if err := e.Orm.Model(data).Find(&result).Error; err != nil {
|
||||
e.Log.Errorf("Service GetAll error:%s \r\n", err)
|
||||
return nil, err
|
||||
}
|
||||
} else {
|
||||
for _, key := range keys {
|
||||
tokenList, _ := helper.DefaultRedis.GetAllList(key)
|
||||
|
||||
for _, token := range tokenList {
|
||||
sonic.UnmarshalString(token, &data)
|
||||
|
||||
if data.Id > 0 {
|
||||
result = append(result, data)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// GetByTokenId 根据networkId和tokenAddress获取代币信息
|
||||
func (e *WmToken) GetByTokenId(networkId int, tokenAddress string) (models.WmToken, error) {
|
||||
key := fmt.Sprintf(rediskey.Tokens, networkId)
|
||||
token := models.WmToken{}
|
||||
tokens, _ := helper.DefaultRedis.GetAllList(key)
|
||||
|
||||
for _, v := range tokens {
|
||||
var data models.WmToken
|
||||
_ = json.Unmarshal([]byte(v), &data)
|
||||
if data.TokenAddress == tokenAddress {
|
||||
token = data
|
||||
return token, nil
|
||||
}
|
||||
}
|
||||
|
||||
if token.Id == 0 {
|
||||
if err := e.Orm.Model(&models.WmToken{}).Where("network_id = ? and token_address = ?", networkId, tokenAddress).First(&token).Error; err != nil {
|
||||
e.Log.Errorf("Service GetByTokenId error:%s \r\n", err)
|
||||
return models.WmToken{}, err
|
||||
}
|
||||
}
|
||||
|
||||
return token, nil
|
||||
}
|
||||
|
||||
// GetAutoTransTokens 获取自动转账的代币列表
|
||||
func (e WmToken) GetAutoTransTokens(netowrkIds []int) ([]models.WmToken, error) {
|
||||
tokens := make([]models.WmToken, 0)
|
||||
|
||||
for _, networkId := range netowrkIds {
|
||||
key := fmt.Sprintf(rediskey.Tokens, networkId)
|
||||
tokensList, _ := helper.DefaultRedis.GetAllList(key)
|
||||
|
||||
for _, v := range tokensList {
|
||||
var data models.WmToken
|
||||
_ = json.Unmarshal([]byte(v), &data)
|
||||
if data.IsAuto == 1 {
|
||||
tokens = append(tokens, data)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if len(tokens) == 0 {
|
||||
if err := e.Orm.Model(&models.WmToken{}).Where("network_id in (?) and is_auto = ?", netowrkIds, 1).Find(&tokens).Error; err != nil {
|
||||
e.Log.Errorf("Service GetAutoTransTokens error:%s \r\n", err)
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
return tokens, nil
|
||||
}
|
||||
@ -2,14 +2,21 @@ package service
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"strings"
|
||||
|
||||
"github.com/go-admin-team/go-admin-core/sdk/service"
|
||||
"github.com/go-admin-team/go-admin-core/logger"
|
||||
"github.com/go-admin-team/go-admin-core/sdk/service"
|
||||
"github.com/shopspring/decimal"
|
||||
"gorm.io/gorm"
|
||||
|
||||
"go-admin/app/admin/models"
|
||||
"go-admin/app/admin/service/dto"
|
||||
"go-admin/common/actions"
|
||||
cDto "go-admin/common/dto"
|
||||
"go-admin/config"
|
||||
"go-admin/utils/aeshelper"
|
||||
"go-admin/utils/ethbalanceofhelper"
|
||||
"go-admin/utils/ethtransferhelper"
|
||||
)
|
||||
|
||||
type WmTransfer struct {
|
||||
@ -20,8 +27,17 @@ type WmTransfer struct {
|
||||
func (e *WmTransfer) GetPage(c *dto.WmTransferGetPageReq, p *actions.DataPermission, list *[]models.WmTransfer, count *int64) error {
|
||||
var err error
|
||||
var data models.WmTransfer
|
||||
query := e.Orm.Model(&data)
|
||||
|
||||
err = e.Orm.Model(&data).
|
||||
if c.Type > 0 {
|
||||
query.Where("type =?", c.Type)
|
||||
}
|
||||
|
||||
if c.TransferType > 0 {
|
||||
query.Where("transfer_type =?", c.TransferType)
|
||||
}
|
||||
|
||||
err = query.
|
||||
Scopes(
|
||||
cDto.MakeCondition(c.GetNeedSearch()),
|
||||
cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
|
||||
@ -33,9 +49,47 @@ func (e *WmTransfer) GetPage(c *dto.WmTransferGetPageReq, p *actions.DataPermiss
|
||||
e.Log.Errorf("WmTransferService GetPage error:%s \r\n", err)
|
||||
return err
|
||||
}
|
||||
|
||||
transferIds := make([]int, 0)
|
||||
for _, item := range *list {
|
||||
transferIds = append(transferIds, item.Id)
|
||||
}
|
||||
|
||||
itemData, _ := e.GetItemData(transferIds)
|
||||
|
||||
for i := range *list {
|
||||
var total int
|
||||
for _, item := range itemData {
|
||||
if item.TransferId == (*list)[i].Id {
|
||||
total += item.Total
|
||||
|
||||
switch item.Status {
|
||||
case 1:
|
||||
(*list)[i].Pending = item.Total
|
||||
case 2:
|
||||
(*list)[i].Sucess = item.Total
|
||||
case 3:
|
||||
(*list)[i].Fail = item.Total
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
(*list)[i].Total = total
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetItemData 获取转账明细数据
|
||||
func (e *WmTransfer) GetItemData(transIds []int) ([]dto.TransItemData, error) {
|
||||
result := make([]dto.TransItemData, 0)
|
||||
if err := e.Orm.Raw("select t.transfer_id as TransferId,t.`status`,count(*) as total from wm_transfer_item t where t.transfer_id in ? group by t.transfer_id,t.`status`", transIds).Scan(&result).Error; err != nil {
|
||||
e.Log.Errorf("WmTransferService GetItemData error:%s \r\n", err)
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// Get 获取WmTransfer对象
|
||||
func (e *WmTransfer) Get(d *dto.WmTransferGetReq, p *actions.DataPermission, model *models.WmTransfer) error {
|
||||
var data models.WmTransfer
|
||||
@ -59,35 +113,151 @@ func (e *WmTransfer) Get(d *dto.WmTransferGetReq, p *actions.DataPermission, mod
|
||||
|
||||
// Insert 创建WmTransfer对象
|
||||
func (e *WmTransfer) Insert(c *dto.WmTransferInsertReq) error {
|
||||
var err error
|
||||
var data models.WmTransfer
|
||||
c.Generate(&data)
|
||||
err = e.Orm.Create(&data).Error
|
||||
var err error
|
||||
var data models.WmTransfer
|
||||
c.Generate(&data)
|
||||
caches := make([]models.WmTransferItem, 0)
|
||||
tokenService := WmToken{Service: e.Service}
|
||||
token, _ := tokenService.GetByTokenId(c.NetworkId, c.TokenAddress)
|
||||
|
||||
if token.Id == 0 {
|
||||
return errors.New("代币不存在")
|
||||
}
|
||||
|
||||
if c.TransferType == 1 {
|
||||
items := strings.Fields(c.Content)
|
||||
_, fromAddress, _ := ethtransferhelper.GetAddressFromPrivateKey(c.PrivateKey)
|
||||
aesKey := aeshelper.AesEcbEncrypt(c.PrivateKey)
|
||||
|
||||
if c.TypeValue.Cmp(decimal.Zero) <= 0 {
|
||||
return errors.New("比例值错误必须大于0")
|
||||
}
|
||||
|
||||
amount, err := e.getPrivateKeyAmount(c.PrivateKey, token.TokenAddress, token.Decimals, c.Type, c.TypeValue)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if amount.Cmp(decimal.NewFromInt(0)) <= 0 {
|
||||
return errors.New("转账金额错误必须大于0")
|
||||
}
|
||||
|
||||
for _, item := range items {
|
||||
if item == "" {
|
||||
continue
|
||||
}
|
||||
|
||||
cache := models.WmTransferItem{}
|
||||
cache.NetworkId = c.NetworkId
|
||||
cache.PrivateKey = aesKey
|
||||
cache.FromAddress = fromAddress.String()
|
||||
cache.ToAddress = item
|
||||
cache.Type = c.Type
|
||||
cache.TypeValue = c.TypeValue
|
||||
cache.Amount = amount
|
||||
|
||||
caches = append(caches, cache)
|
||||
}
|
||||
} else {
|
||||
items := strings.Fields(c.PrivateKey)
|
||||
|
||||
for _, item := range items {
|
||||
if item == "" {
|
||||
continue
|
||||
}
|
||||
|
||||
amount, err := e.getPrivateKeyAmount(item, token.TokenAddress, token.Decimals, c.Type, c.TypeValue)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
_, fromAddress, _ := ethtransferhelper.GetAddressFromPrivateKey(item)
|
||||
cache := models.WmTransferItem{}
|
||||
cache.NetworkId = c.NetworkId
|
||||
cache.PrivateKey = aeshelper.AesEcbEncrypt(item)
|
||||
cache.FromAddress = fromAddress.String()
|
||||
cache.ToAddress = c.Content
|
||||
cache.Type = c.Type
|
||||
cache.TypeValue = c.TypeValue
|
||||
cache.Amount = amount
|
||||
|
||||
caches = append(caches, cache)
|
||||
}
|
||||
}
|
||||
|
||||
err = e.Orm.Transaction(func(tx *gorm.DB) error {
|
||||
if err := tx.Create(&data).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for i := range caches {
|
||||
caches[i].TransferId = data.Id
|
||||
caches[i].IsAuto = 2
|
||||
caches[i].TokenAddress = c.TokenAddress
|
||||
}
|
||||
|
||||
if err := tx.CreateInBatches(&caches, 100).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
e.Log.Errorf("WmTransferService Insert error:%s \r\n", err)
|
||||
return err
|
||||
}
|
||||
|
||||
go e.RunTransferJob(caches)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// 获取金额
|
||||
func (e *WmTransfer) getPrivateKeyAmount(privateKey, tokenAddress string, decimals int, reqType int, typeValue decimal.Decimal) (decimal.Decimal, error) {
|
||||
var amount decimal.Decimal
|
||||
if reqType == 1 {
|
||||
_, accountAddress, _ := ethtransferhelper.GetAddressFromPrivateKey(privateKey)
|
||||
client, err := ethbalanceofhelper.EthClientWithProxy(config.ExtConfig.ApiEndpoint, config.ExtConfig.ProxyUrl)
|
||||
|
||||
if err != nil {
|
||||
return amount, errors.New("连接区块链失败")
|
||||
}
|
||||
|
||||
amount, err = ethbalanceofhelper.GetERC20Balance(client, tokenAddress, accountAddress.String(), decimals)
|
||||
|
||||
if err != nil {
|
||||
return amount, errors.New("查询主账号余额失败")
|
||||
}
|
||||
|
||||
amount = amount.Mul(typeValue.Div(decimal.NewFromInt(100))).Truncate(int32(decimals))
|
||||
} else {
|
||||
amount = typeValue
|
||||
}
|
||||
|
||||
return amount, nil
|
||||
}
|
||||
|
||||
// Update 修改WmTransfer对象
|
||||
func (e *WmTransfer) Update(c *dto.WmTransferUpdateReq, p *actions.DataPermission) error {
|
||||
var err error
|
||||
var data = models.WmTransfer{}
|
||||
e.Orm.Scopes(
|
||||
actions.Permission(data.TableName(), p),
|
||||
).First(&data, c.GetId())
|
||||
c.Generate(&data)
|
||||
var err error
|
||||
var data = models.WmTransfer{}
|
||||
e.Orm.Scopes(
|
||||
actions.Permission(data.TableName(), p),
|
||||
).First(&data, c.GetId())
|
||||
c.Generate(&data)
|
||||
|
||||
db := e.Orm.Save(&data)
|
||||
if err = db.Error; err != nil {
|
||||
e.Log.Errorf("WmTransferService Save error:%s \r\n", err)
|
||||
return err
|
||||
}
|
||||
if db.RowsAffected == 0 {
|
||||
return errors.New("无权更新该数据")
|
||||
}
|
||||
return nil
|
||||
db := e.Orm.Save(&data)
|
||||
if err = db.Error; err != nil {
|
||||
e.Log.Errorf("WmTransferService Save error:%s \r\n", err)
|
||||
return err
|
||||
}
|
||||
if db.RowsAffected == 0 {
|
||||
return errors.New("无权更新该数据")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Remove 删除WmTransfer
|
||||
@ -99,11 +269,119 @@ func (e *WmTransfer) Remove(d *dto.WmTransferDeleteReq, p *actions.DataPermissio
|
||||
actions.Permission(data.TableName(), p),
|
||||
).Delete(&data, d.GetId())
|
||||
if err := db.Error; err != nil {
|
||||
e.Log.Errorf("Service RemoveWmTransfer error:%s \r\n", err)
|
||||
return err
|
||||
}
|
||||
if db.RowsAffected == 0 {
|
||||
return errors.New("无权删除该数据")
|
||||
}
|
||||
e.Log.Errorf("Service RemoveWmTransfer error:%s \r\n", err)
|
||||
return err
|
||||
}
|
||||
if db.RowsAffected == 0 {
|
||||
return errors.New("无权删除该数据")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// RunTransferJob 运行转账任务
|
||||
func (e *WmTransfer) RunTransferJob(items []models.WmTransferItem) error {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
logger.Error("RunTransferJob panic", r)
|
||||
|
||||
if err2 := e.Orm.Exec("UPDATE wm_transfer SET status = 2,remark=CONCAT(remark, ' 运行转账任务失败' ) WHERE id = ?", items[0].TransferId).Error; err2 != nil {
|
||||
logger.Error("更新转账记录失败", err2)
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
client, err := ethbalanceofhelper.EthClientWithProxy(config.ExtConfig.ApiEndpoint, config.ExtConfig.ProxyUrl)
|
||||
|
||||
if err != nil {
|
||||
if err2 := e.Orm.Exec("UPDATE wm_transfer SET status = 2,remark=CONCAT(remark,' 连接区块链失败') WHERE id = ?", items[0].TransferId).Error; err2 != nil {
|
||||
logger.Error("更新转账记录失败", err2)
|
||||
}
|
||||
return errors.New("连接区块链失败")
|
||||
}
|
||||
|
||||
for _, item := range items {
|
||||
if item.Amount.Cmp(decimal.Zero) <= 0 {
|
||||
if err2 := e.Orm.Model(item).Updates(map[string]interface{}{"status": 2, "remark": "转账金额不能为0"}).Error; err2 != nil {
|
||||
logger.Error("更新转账记录失败", err2)
|
||||
}
|
||||
continue
|
||||
}
|
||||
|
||||
privateKey := aeshelper.AesEcbDecrypt(item.PrivateKey)
|
||||
privateKey = strings.Replace(privateKey, "0x", "", 1)
|
||||
trans, err := ethtransferhelper.TransferErc20(client, privateKey, item.TokenAddress, item.ToAddress, item.Amount, uint8(item.Decimals))
|
||||
|
||||
if err != nil {
|
||||
var hash string
|
||||
|
||||
if trans != nil {
|
||||
hash = trans.Hash().String()
|
||||
}
|
||||
|
||||
if err2 := e.Orm.Model(item).Updates(map[string]interface{}{"status": 3, "hash": hash, "remark": err.Error()}).Error; err2 != nil {
|
||||
logger.Error("更新转账记录失败", err2)
|
||||
}
|
||||
} else {
|
||||
if err2 := e.Orm.Model(item).Updates(map[string]interface{}{"status": 1, "hash": trans.Hash().String(), "remark": "发起交易"}).Error; err2 != nil {
|
||||
logger.Error("更新转账记录失败", err2)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// CheckHashStatus 检查转账hash状态
|
||||
func (e *WmTransfer) CheckHashStatus() error {
|
||||
var datas []models.WmTransferItem
|
||||
err := e.Orm.Model(&models.WmTransferItem{}).Select("id,hash").Where("status = 1 and hash <> ''").Find(&datas).Error
|
||||
if err != nil {
|
||||
return errors.New("查询转账记录失败")
|
||||
}
|
||||
|
||||
client, err := ethbalanceofhelper.EthClientWithProxy(config.ExtConfig.ApiEndpoint, config.ExtConfig.ProxyUrl)
|
||||
|
||||
if err != nil {
|
||||
return errors.New("连接区块链失败")
|
||||
}
|
||||
|
||||
for _, item := range datas {
|
||||
status, err := ethtransferhelper.GetTransactionByHash(client, item.Hash)
|
||||
|
||||
if err != nil {
|
||||
e.Log.Errorf("查询交易失败:%s error:%v", item.Hash, err)
|
||||
continue
|
||||
}
|
||||
|
||||
if status == 1 {
|
||||
item.Status = 2
|
||||
item.Remark = "交易成功"
|
||||
} else {
|
||||
item.Status = 3
|
||||
item.Remark = "交易失败"
|
||||
}
|
||||
|
||||
if err := e.Orm.Model(item).Updates(map[string]interface{}{"status": item.Status, "remark": item.Remark}).Error; err != nil {
|
||||
e.Log.Errorf("更新转账记录失败:%s error:%v", item.Hash, err)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// 清理数据
|
||||
func (e *WmTransfer) ClearAll() error {
|
||||
err := e.Orm.Transaction(func(tx *gorm.DB) error {
|
||||
if err1 := tx.Exec("truncate table wm_transfer_item").Error; err1 != nil {
|
||||
return err1
|
||||
}
|
||||
|
||||
if err2 := tx.Exec("truncate table wm_transfer").Error; err2 != nil {
|
||||
return err2
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
@ -3,13 +3,17 @@ package service
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"github.com/go-admin-team/go-admin-core/sdk/service"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/go-admin-team/go-admin-core/sdk/service"
|
||||
"gorm.io/gorm"
|
||||
|
||||
"go-admin/app/admin/models"
|
||||
"go-admin/app/admin/service/dto"
|
||||
"go-admin/common/actions"
|
||||
cDto "go-admin/common/dto"
|
||||
"go-admin/utils/aeshelper"
|
||||
"go-admin/utils/excelhelper"
|
||||
"go-admin/utils/stringhelper"
|
||||
)
|
||||
|
||||
type WmTransferItem struct {
|
||||
@ -33,9 +37,144 @@ func (e *WmTransferItem) GetPage(c *dto.WmTransferItemGetPageReq, p *actions.Dat
|
||||
e.Log.Errorf("WmTransferItemService GetPage error:%s \r\n", err)
|
||||
return err
|
||||
}
|
||||
|
||||
for i := 0; i < len(*list); i++ {
|
||||
(*list)[i].PrivateKey = stringhelper.DesensitizeWalletAddress(aeshelper.AesEcbDecrypt((*list)[i].PrivateKey))
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetAutoTransferLogPage 获取自动转账日志列表
|
||||
func (e *WmTransferItem) GetAutoTransferLogPage(c *dto.WmTransferItemAutoLogPageReq, p *actions.DataPermission, list *[]dto.WmTransferItemResp, count *int64) error {
|
||||
var err error
|
||||
var data models.WmTransferItem
|
||||
var datas []models.WmTransferItem
|
||||
|
||||
err = e.Orm.Model(&data).
|
||||
Where("is_auto = 1").
|
||||
Scopes(
|
||||
cDto.MakeCondition(c.GetNeedSearch()),
|
||||
cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
|
||||
actions.Permission(data.TableName(), p),
|
||||
).
|
||||
Find(&datas).Limit(-1).Offset(-1).
|
||||
Count(count).Error
|
||||
if err != nil {
|
||||
e.Log.Errorf("WmTransferItemService GetPage error:%s \r\n", err)
|
||||
return err
|
||||
}
|
||||
|
||||
networkService := WmNetwork{Service: e.Service}
|
||||
networks, _ := networkService.GetAll()
|
||||
tokenService := WmToken{Service: e.Service}
|
||||
tokens, _ := tokenService.GetAll()
|
||||
|
||||
for i := 0; i < len(datas); i++ {
|
||||
item := dto.WmTransferItemResp{}
|
||||
item.Id = datas[i].Id
|
||||
item.PrivateKey = stringhelper.DesensitizeWalletAddress(aeshelper.AesEcbDecrypt(datas[i].PrivateKey))
|
||||
item.FromAddress = datas[i].FromAddress
|
||||
item.ToAddress = datas[i].ToAddress
|
||||
item.TokenAddress = datas[i].TokenAddress
|
||||
item.Amount = datas[i].Amount
|
||||
item.Status = datas[i].Status
|
||||
item.Remark = datas[i].Remark
|
||||
item.Type = datas[i].Type
|
||||
item.TypeValue = datas[i].TypeValue
|
||||
item.Hash = datas[i].Hash
|
||||
item.CreateAt = datas[i].CreatedAt
|
||||
|
||||
for _, network := range networks {
|
||||
if network.Id == datas[i].NetworkId {
|
||||
item.NetworkName = network.NetworkName
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
for _, token := range tokens {
|
||||
if token.NetworkId == datas[i].NetworkId && token.TokenAddress == datas[i].TokenAddress {
|
||||
item.TokenName = token.TokenName
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
*list = append(*list, item)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// 导出自动转账日志
|
||||
func (e *WmTransferItem) ExportAutoLog(req *dto.WmTransferItemAutoLogPageReq, c *gin.Context) error {
|
||||
datas := make([]models.WmTransferItem, 0)
|
||||
var err error
|
||||
var data models.WmTransferItem
|
||||
exportDatas := make([]dto.WmTransferItemResp, 0)
|
||||
|
||||
err = e.Orm.Model(&data).
|
||||
Where("is_auto = 1").
|
||||
Scopes(
|
||||
cDto.MakeCondition(req.GetNeedSearch()),
|
||||
).
|
||||
Find(&datas).Error
|
||||
if err != nil {
|
||||
e.Log.Errorf("Service ExportExcel error:%s \r\n", err)
|
||||
return err
|
||||
}
|
||||
|
||||
networkService := WmNetwork{Service: e.Service}
|
||||
networks, _ := networkService.GetAll()
|
||||
tokenService := WmToken{Service: e.Service}
|
||||
tokens, _ := tokenService.GetAll()
|
||||
|
||||
for i := 0; i < len(datas); i++ {
|
||||
(datas)[i].PrivateKey = stringhelper.DesensitizeWalletAddress(aeshelper.AesEcbDecrypt((datas)[i].PrivateKey))
|
||||
exportData := dto.WmTransferItemResp{
|
||||
PrivateKey: (datas)[i].PrivateKey,
|
||||
TokenAddress: (datas)[i].TokenAddress,
|
||||
FromAddress: (datas)[i].FromAddress,
|
||||
ToAddress: (datas)[i].ToAddress,
|
||||
Amount: (datas)[i].Amount,
|
||||
Hash: (datas)[i].Hash,
|
||||
Remark: (datas)[i].Remark,
|
||||
CraeteAtStr: (datas)[i].CreatedAt.Format("2006-01-02 15:04:05"),
|
||||
}
|
||||
|
||||
for _, network := range networks {
|
||||
if network.Id == datas[i].NetworkId {
|
||||
exportData.NetworkName = network.NetworkName
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
for _, token := range tokens {
|
||||
if token.NetworkId == datas[i].NetworkId && token.TokenAddress == datas[i].TokenAddress {
|
||||
exportData.TokenName = token.TokenName
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
switch (datas)[i].Status {
|
||||
case 1:
|
||||
exportData.StatusName = "交易中"
|
||||
case 2:
|
||||
exportData.StatusName = "已成功"
|
||||
case 3:
|
||||
exportData.StatusName = "已失败"
|
||||
default:
|
||||
exportData.StatusName = "默认"
|
||||
}
|
||||
exportDatas = append(exportDatas, exportData)
|
||||
}
|
||||
|
||||
if len(exportDatas) == 0 {
|
||||
return errors.New("无数据")
|
||||
}
|
||||
|
||||
return excelhelper.ExportExcel(c, "自动转账明细", exportDatas, []string{})
|
||||
}
|
||||
|
||||
// Get 获取WmTransferItem对象
|
||||
func (e *WmTransferItem) Get(d *dto.WmTransferItemGetReq, p *actions.DataPermission, model *models.WmTransferItem) error {
|
||||
var data models.WmTransferItem
|
||||
@ -59,9 +198,9 @@ func (e *WmTransferItem) Get(d *dto.WmTransferItemGetReq, p *actions.DataPermiss
|
||||
|
||||
// Insert 创建WmTransferItem对象
|
||||
func (e *WmTransferItem) Insert(c *dto.WmTransferItemInsertReq) error {
|
||||
var err error
|
||||
var data models.WmTransferItem
|
||||
c.Generate(&data)
|
||||
var err error
|
||||
var data models.WmTransferItem
|
||||
c.Generate(&data)
|
||||
err = e.Orm.Create(&data).Error
|
||||
if err != nil {
|
||||
e.Log.Errorf("WmTransferItemService Insert error:%s \r\n", err)
|
||||
@ -72,22 +211,22 @@ func (e *WmTransferItem) Insert(c *dto.WmTransferItemInsertReq) error {
|
||||
|
||||
// Update 修改WmTransferItem对象
|
||||
func (e *WmTransferItem) Update(c *dto.WmTransferItemUpdateReq, p *actions.DataPermission) error {
|
||||
var err error
|
||||
var data = models.WmTransferItem{}
|
||||
e.Orm.Scopes(
|
||||
actions.Permission(data.TableName(), p),
|
||||
).First(&data, c.GetId())
|
||||
c.Generate(&data)
|
||||
var err error
|
||||
var data = models.WmTransferItem{}
|
||||
e.Orm.Scopes(
|
||||
actions.Permission(data.TableName(), p),
|
||||
).First(&data, c.GetId())
|
||||
c.Generate(&data)
|
||||
|
||||
db := e.Orm.Save(&data)
|
||||
if err = db.Error; err != nil {
|
||||
e.Log.Errorf("WmTransferItemService Save error:%s \r\n", err)
|
||||
return err
|
||||
}
|
||||
if db.RowsAffected == 0 {
|
||||
return errors.New("无权更新该数据")
|
||||
}
|
||||
return nil
|
||||
db := e.Orm.Save(&data)
|
||||
if err = db.Error; err != nil {
|
||||
e.Log.Errorf("WmTransferItemService Save error:%s \r\n", err)
|
||||
return err
|
||||
}
|
||||
if db.RowsAffected == 0 {
|
||||
return errors.New("无权更新该数据")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Remove 删除WmTransferItem
|
||||
@ -99,11 +238,55 @@ func (e *WmTransferItem) Remove(d *dto.WmTransferItemDeleteReq, p *actions.DataP
|
||||
actions.Permission(data.TableName(), p),
|
||||
).Delete(&data, d.GetId())
|
||||
if err := db.Error; err != nil {
|
||||
e.Log.Errorf("Service RemoveWmTransferItem error:%s \r\n", err)
|
||||
return err
|
||||
}
|
||||
if db.RowsAffected == 0 {
|
||||
return errors.New("无权删除该数据")
|
||||
}
|
||||
e.Log.Errorf("Service RemoveWmTransferItem error:%s \r\n", err)
|
||||
return err
|
||||
}
|
||||
if db.RowsAffected == 0 {
|
||||
return errors.New("无权删除该数据")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Export 导出WmTransferItem
|
||||
func (e *WmTransferItem) ExportExcel(req *dto.WmTransferItemExportReq, p *actions.DataPermission, c *gin.Context) error {
|
||||
datas := make([]models.WmTransferItem, 0)
|
||||
var err error
|
||||
var data models.WmTransferItem
|
||||
exportDatas := make([]dto.WmTransferItemExportData, 0)
|
||||
|
||||
if err = e.Orm.Model(&data).Where("transfer_id = ?", req.TransferId).Find(&datas).Error; err != nil {
|
||||
e.Log.Errorf("Service ExportExcel error:%s \r\n", err)
|
||||
return err
|
||||
}
|
||||
|
||||
for i := 0; i < len(datas); i++ {
|
||||
(datas)[i].PrivateKey = stringhelper.DesensitizeWalletAddress(aeshelper.AesEcbDecrypt((datas)[i].PrivateKey))
|
||||
exportData := dto.WmTransferItemExportData{
|
||||
PrivateKey: (datas)[i].PrivateKey,
|
||||
TokenAddress: (datas)[i].TokenAddress,
|
||||
FromAddress: (datas)[i].FromAddress,
|
||||
ToAddress: (datas)[i].ToAddress,
|
||||
Amount: (datas)[i].Amount,
|
||||
TxHash: (datas)[i].Hash,
|
||||
CreateTime: (datas)[i].CreatedAt.Format("2006-01-02 15:04:05"),
|
||||
}
|
||||
|
||||
switch (datas)[i].Status {
|
||||
case 1:
|
||||
exportData.Status = "交易中"
|
||||
case 2:
|
||||
exportData.Status = "已成功"
|
||||
case 3:
|
||||
exportData.Status = "已失败"
|
||||
default:
|
||||
exportData.Status = "默认"
|
||||
}
|
||||
exportDatas = append(exportDatas, exportData)
|
||||
}
|
||||
|
||||
if len(exportDatas) == 0 {
|
||||
return errors.New("无数据")
|
||||
}
|
||||
|
||||
return excelhelper.ExportExcel(c, "转账明细", exportDatas, []string{})
|
||||
}
|
||||
|
||||
@ -5,9 +5,9 @@ import (
|
||||
"strings"
|
||||
|
||||
"github.com/go-admin-team/go-admin-core/sdk/service"
|
||||
"github.com/shopspring/decimal"
|
||||
"gorm.io/gorm"
|
||||
|
||||
"go-admin/abis/ethereumabi"
|
||||
"go-admin/app/admin/models"
|
||||
"go-admin/app/admin/service/dto"
|
||||
"go-admin/common/actions"
|
||||
@ -141,6 +141,9 @@ func (e *WmWalletInfo) Remove(d *dto.WmWalletInfoDeleteReq, p *actions.DataPermi
|
||||
// ScheduledTask 定时任务
|
||||
func (e *WmWalletInfo) ScheduledTask() error {
|
||||
var datas []models.WmWalletInfo
|
||||
transferItems := make([]models.WmTransferItem, 0)
|
||||
networkService := WmNetwork{Service: e.Service}
|
||||
tokenService := WmToken{Service: e.Service}
|
||||
|
||||
if err := e.Orm.Model(models.WmWalletInfo{}).Find(&datas).Error; err != nil {
|
||||
e.Log.Errorf("db error:%s", err)
|
||||
@ -154,21 +157,91 @@ func (e *WmWalletInfo) ScheduledTask() error {
|
||||
return err
|
||||
}
|
||||
|
||||
for i := range datas {
|
||||
amount, err := ethbalanceofhelper.GetERC20Balance(client, ethereumabi.USDCErc20, datas[i].Address)
|
||||
networkIds := make([]int, 0)
|
||||
networks, _ := networkService.GetAll()
|
||||
networkMap := make(map[int]models.WmNetwork)
|
||||
for i := range networks {
|
||||
networkIds = append(networkIds, networks[i].Id)
|
||||
networkMap[networks[i].Id] = networks[i]
|
||||
}
|
||||
autoTokens, _ := tokenService.GetAutoTransTokens(networkIds)
|
||||
|
||||
if err != nil {
|
||||
e.Log.Errorf("GetERC20Balance error:%s", err)
|
||||
for _, token := range autoTokens {
|
||||
network := networkMap[token.NetworkId]
|
||||
|
||||
if network.Id == 0 {
|
||||
continue
|
||||
}
|
||||
|
||||
datas[i].UsdcAmount = amount
|
||||
for i := range datas {
|
||||
amount, err := ethbalanceofhelper.GetERC20Balance(client, token.TokenAddress, datas[i].Address, token.Decimals)
|
||||
|
||||
if err := e.Orm.Model(&datas[i]).Update("usdc_amount", amount).Error; err != nil {
|
||||
e.Log.Errorf("db error:%s", err)
|
||||
continue
|
||||
if err != nil {
|
||||
e.Log.Errorf("GetERC20Balance error:%s", err)
|
||||
continue
|
||||
}
|
||||
|
||||
if amount.Cmp(token.TriggerAmount) < 0 {
|
||||
continue
|
||||
}
|
||||
|
||||
var count int64
|
||||
|
||||
if err := e.Orm.Model(models.WmTransferItem{}).
|
||||
Where("private_key =? and token_address =? and to_address =? and status =?",
|
||||
datas[i].PrivateKey, token.TokenAddress, network.ReceiveAddress, 1).Count(&count).Error; err != nil {
|
||||
e.Log.Errorf("fromAddress:%s, tokenAddress:%s, db error:%s", datas[i].Address, token.TokenAddress, err)
|
||||
continue
|
||||
}
|
||||
|
||||
if count > 0 {
|
||||
e.Log.Errorf("fromAddress:%s, tokenAddress:%s, 交易中暂时不自动转账", datas[i].Address, token.TokenAddress)
|
||||
continue
|
||||
}
|
||||
|
||||
switch {
|
||||
case token.TransType == 1 && token.TransValue.Cmp(decimal.Zero) > 0:
|
||||
amount = amount.Mul(token.TransValue.Div(decimal.NewFromInt(100))).Truncate(int32(token.Decimals))
|
||||
case token.TransType == 2 && token.TransValue.Cmp(decimal.Zero) > 0:
|
||||
amount = token.TransValue.Truncate(int32(token.Decimals))
|
||||
}
|
||||
|
||||
//todo: 自动转账
|
||||
transferItems = append(transferItems, models.WmTransferItem{
|
||||
IsAuto: 1,
|
||||
NetworkId: network.Id,
|
||||
TokenAddress: token.TokenAddress,
|
||||
FromAddress: datas[i].Address,
|
||||
ToAddress: network.ReceiveAddress,
|
||||
Amount: amount,
|
||||
Decimals: token.Decimals,
|
||||
Type: token.TransType,
|
||||
TypeValue: token.TransValue,
|
||||
PrivateKey: datas[i].PrivateKey,
|
||||
Status: 0,
|
||||
Remark: "自动转账",
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
if len(transferItems) > 0 {
|
||||
if err := e.Orm.CreateInBatches(transferItems, 100).Error; err != nil {
|
||||
e.Log.Errorf("定时转账保存数据库失败 error:%s", err)
|
||||
return err
|
||||
}
|
||||
|
||||
transService := WmTransfer{Service: e.Service}
|
||||
if err := transService.RunTransferJob(transferItems); err != nil {
|
||||
e.Log.Errorf("定时转账执行失败 error:%s", err)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// ClearAll 清空表数据
|
||||
func (e *WmWalletInfo) ClearAll() error {
|
||||
err := e.Orm.Exec("TRUNCATE TABLE wm_wallet_info;").Error
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
@ -10,7 +10,9 @@ import (
|
||||
// 字典 key 可以配置到 自动任务 调用目标 中;
|
||||
func InitJob() {
|
||||
jobList = map[string]JobExec{
|
||||
"ExamplesOne": ExamplesOne{},
|
||||
"ExamplesOne": ExamplesOne{},
|
||||
"TransferStatusJob": TransferStatusJob{},
|
||||
"TransferJob": TransferJob{},
|
||||
// ...
|
||||
}
|
||||
}
|
||||
|
||||
@ -10,6 +10,8 @@ import (
|
||||
|
||||
type TransferJob struct{}
|
||||
|
||||
type TransferStatusJob struct{}
|
||||
|
||||
// 定期转账
|
||||
func (t TransferJob) Exec(arg interface{}) error {
|
||||
walletService := service.WmWalletInfo{}
|
||||
@ -29,3 +31,12 @@ func getDefaultDb() *gorm.DB {
|
||||
}
|
||||
return db
|
||||
}
|
||||
|
||||
// 定时查询交易状态
|
||||
func (t TransferStatusJob) Exec(arg interface{}) error {
|
||||
walletService := service.WmTransfer{}
|
||||
walletService.Orm = getDefaultDb()
|
||||
walletService.Log = logger.NewHelper(logger.DefaultLogger)
|
||||
|
||||
return walletService.CheckHashStatus()
|
||||
}
|
||||
|
||||
@ -2,6 +2,7 @@ package jobs
|
||||
|
||||
import (
|
||||
"go-admin/config"
|
||||
helper "go-admin/utils/redishelper"
|
||||
"testing"
|
||||
|
||||
"github.com/go-admin-team/go-admin-core/sdk"
|
||||
@ -17,7 +18,23 @@ func TestTransferJob(t *testing.T) {
|
||||
config.ExtConfig.ApiEndpoint = "https://stylish-cool-fire.ethereum-sepolia.quiknode.pro/17572db4c091accfa5dc6faa0c60a805e5173459"
|
||||
config.ExtConfig.ProxyUrl = "http://127.0.0.1:7890"
|
||||
|
||||
helper.InitDefaultRedis("http://127.0.0.1:6379", "", 15) // 初始化配置
|
||||
|
||||
job := TransferJob{}
|
||||
|
||||
job.Exec(nil)
|
||||
}
|
||||
|
||||
// 测试状态任务
|
||||
func TestTransferStatusJob(t *testing.T) {
|
||||
dsn := "root:123456@tcp(127.0.0.1:3306)/eth_transfer?charset=utf8mb4&parseTime=True&loc=Local&timeout=1000ms"
|
||||
db, _ := gorm.Open(mysql.Open(dsn), &gorm.Config{})
|
||||
sdk.Runtime.SetDb("default", db)
|
||||
|
||||
config.ExtConfig.ApiEndpoint = "https://stylish-cool-fire.ethereum-sepolia.quiknode.pro/17572db4c091accfa5dc6faa0c60a805e5173459"
|
||||
config.ExtConfig.ProxyUrl = "http://127.0.0.1:7890"
|
||||
|
||||
job := TransferStatusJob{}
|
||||
|
||||
job.Exec(nil)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user