feat(card-info): 添加原生京东卡账户相关接口和功能

- 新增原生京东卡账户相关的数据结构和接口定义
- 实现原生京东卡账户的创建、删除、列表查询等功能
- 添加原生京东卡账户的批量导入、导出模板等功能
- 集成原生京东卡账户状态刷新和余额查询功能- 更新系统初始化,注册原生京东卡账户相关控制器
This commit is contained in:
danial
2025-03-03 08:52:59 +08:00
parent 5252fb2fbc
commit 6aa3fdaa8c
18 changed files with 715 additions and 3 deletions

View File

@@ -0,0 +1,26 @@
// =================================================================================
// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT.
// =================================================================================
package card_info_original_jd
import (
"context"
"kami/api/card_info_original_jd/v1"
)
type ICardInfoOriginalJdV1 interface {
OriginalJDAccountDelete(ctx context.Context, req *v1.OriginalJDAccountDeleteReq) (res *v1.OriginalJDAccountDeleteRes, err error)
OriginalJDAccountList(ctx context.Context, req *v1.OriginalJDAccountListReq) (res *v1.OriginalJDAccountListRes, err error)
OriginalJDAccountCreate(ctx context.Context, req *v1.OriginalJDAccountCreateReq) (res *v1.OriginalJDAccountCreateRes, err error)
OriginalJDAccountCookieCheck(ctx context.Context, req *v1.OriginalJDAccountCookieCheckReq) (res *v1.OriginalJDAccountCookieCheckRes, err error)
OriginalJDAccountUpdate(ctx context.Context, req *v1.OriginalJDAccountUpdateReq) (res *v1.OriginalJDAccountUpdateRes, err error)
OriginalJDAccountWalletList(ctx context.Context, req *v1.OriginalJDAccountWalletListReq) (res *v1.OriginalJDAccountWalletListRes, err error)
OriginalJDAccountUpdateStatus(ctx context.Context, req *v1.OriginalJDAccountUpdateStatusReq) (res *v1.OriginalJDAccountUpdateStatusRes, err error)
OriginalJDAccountRefreshStatus(ctx context.Context, req *v1.OriginalJDAccountRefreshStatusReq) (res *v1.OriginalJDAccountRefreshStatusRes, err error)
OriginalDownloadTemplate(ctx context.Context, req *v1.OriginalDownloadTemplateReq) (res *v1.OriginalDownloadTemplateRes, err error)
OriginalJDAccountCookieBatchCheck(ctx context.Context, req *v1.OriginalJDAccountCookieBatchCheckReq) (res *v1.OriginalJDAccountCookieBatchCheckRes, err error)
OriginalJDAccountCookieBatchAdd(ctx context.Context, req *v1.OriginalJDAccountCookieBatchAddReq) (res *v1.OriginalJDAccountCookieBatchAddRes, err error)
OriginalDownload(ctx context.Context, req *v1.OriginalDownloadReq) (res *v1.OriginalDownloadRes, err error)
}

View File

@@ -0,0 +1,146 @@
package v1
import (
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
"kami/api/commonApi"
"kami/internal/consts"
"kami/internal/model/entity"
)
type OriginalJDAccountDeleteReq struct {
g.Meta `path:"/cardInfo/originalJDCard/account/delete" tags:"京东充值卡账户" method:"delete" summary:"删除京东充值卡"`
commonApi.CommonStrId
}
type OriginalJDAccountDeleteRes struct{}
type OriginalJDAccountListReq struct {
g.Meta `path:"/cardInfo/originalJDCard/account/getList" tags:"京东充值卡账户" method:"get" summary:"获取京东充值卡列表"`
commonApi.CommonPageReq
Name string `json:"name" description:"账户名称"`
NickName string `json:"nickName" description:"用户昵称"`
Cookie string `json:"cookie"`
}
type OriginalJDAccountListRecord struct {
entity.V1CardRedeemAccountInfo
UploadUser struct {
Id string `json:"id"`
Username string `json:"username"`
Nickname string `json:"nickname"`
} `json:"uploadUser"`
}
type OriginalJDAccountListRes struct {
commonApi.CommonPageRes[OriginalJDAccountListRecord]
}
type OriginalJDAccountRecord struct {
Cookie string `json:"cookie" v:"required#状态不能为空" description:"cookie不能为空"`
Name string `json:"name" description:"别名"`
MaxAmountLimit int `json:"maxAmountLimit" description:"最大充值限制"`
MaxCountLimit int `json:"maxCountLimit" description:"最大充值次数"`
Remark string `json:"remark" description:"备注"`
Status int `json:"status" description:"状态"`
}
type OriginalJDAccountCreateReq struct {
g.Meta `path:"/cardInfo/originalJDCard/account/create" tags:"京东充值卡账户" method:"post" summary:"创建京东账户"`
OriginalJDAccountRecord
}
type OriginalJDAccountCreateRes struct{}
type OriginalJDAccountCookieCheckReq struct {
g.Meta `path:"/cardInfo/originalJDCard/account/checkCookie" tags:"京东充值卡账户" method:"post" summary:"检测cookie是否可用"`
Cookie string `json:"cookie" v:"required#cookie不能为空" description:"cookie"`
}
type OriginalJDAccountCookieCheckRes struct {
Username string `json:"username" dc:"用户名"`
Nickname string `json:"nickname" dc:"昵称"`
Balance float64 `json:"balance" dc:"余额"`
IsExist bool `json:"isExist" dc:"是否存在系统中"`
IsAvailable bool `json:"isAvailable" dc:"是否可用"`
}
type OriginalJDAccountUpdateReq struct {
g.Meta `path:"/cardInfo/originalJDCard/account/update" tags:"京东充值卡账户" method:"put" summary:"修改京东账户"`
commonApi.CommonStrId
Status int `json:"status" description:"状态"`
Name string `json:"name" description:"别名"`
Remark string `json:"remark" description:"备注"`
MaxAmountLimit int `json:"maxAmountLimit" description:"最大充值限制"`
}
type OriginalJDAccountUpdateRes struct {
}
type OriginalJDAccountWalletListReq struct {
g.Meta `path:"/cardInfo/originalJDCard/account/getWalletList" tags:"京东充值卡账户" method:"get" summary:"获取京东账户流水"`
commonApi.CommonPageReq
AccountId string `json:"accountId" v:"required#缺失ID"`
}
type OriginalJDAccountWalletListRes struct {
commonApi.CommonPageRes[*entity.V1CardRedeemAccountHistory]
}
type OriginalJDAccountUpdateStatusReq struct {
g.Meta `path:"/cardInfo/originalJDCard/account/updateStatus" tags:"京东充值卡账户" method:"put" summary:"修改京东账户状态"`
commonApi.CommonStrId
Status consts.RedeemAccountStatus `json:"status" v:"required#状态不能为空" description:"状态"`
}
type OriginalJDAccountUpdateStatusRes struct {
}
type OriginalJDAccountRefreshStatusReq struct {
g.Meta `path:"/cardInfo/originalJDCard/account/refreshStatus" tags:"京东充值卡账户" method:"put" summary:"刷新账号充值状态"`
commonApi.CommonStrId
}
type OriginalJDAccountRefreshStatusRes struct {
}
type OriginalDownloadTemplateReq struct {
g.Meta `path:"/cardInfo/originalJDCard/account/downloadTemplate" tags:"京东充值卡账户" method:"get" summary:"下载导入模板"`
}
type OriginalDownloadTemplateRes struct {
g.Meta `mime:"application/vnd.ms-excel"`
}
type OriginalJDAccountCookieBatchCheckReq struct {
g.Meta `path:"/cardInfo/originalJDCard/account/check" tags:"京东充值卡账户" method:"post" summary:"检查上传礼品卡是否正常"`
File *ghttp.UploadFile `v:"required#文件不能为空" json:"file" type:"file" description:"选择上传文件"`
}
type OriginalJDAccountCookieBatchInfo struct {
OriginalJDAccountCookieCheckRes
Name string `json:"name" dc:"别名"`
Cookie string `json:"cookie" dc:"cookie"`
MaxAmountLimit int `json:"maxAmountLimit" description:"最大充值限制"`
MaxCountLimit int `json:"maxCountLimit" description:"最大充值次数"`
}
type OriginalJDAccountCookieBatchCheckRes struct {
Msg string `json:"msg" description:"导入结果"`
List []*OriginalJDAccountCookieBatchInfo `json:"list" description:"导入结果"`
}
type OriginalJDAccountCookieBatchAddReq struct {
g.Meta `path:"/cardInfo/originalJDCard/account/batchAdd" tags:"京东充值卡账户" method:"post" summary:"检查礼品卡是否正常"`
List []*OriginalJDAccountCookieBatchInfo `json:"list" description:"导入结果"`
}
type OriginalJDAccountCookieBatchAddRes struct {
}
type OriginalDownloadReq struct {
g.Meta `path:"/cardInfo/originalJDCard/account/download" tags:"京东充值卡账户" method:"get" summary:"下载充值账户"`
}
type OriginalDownloadRes struct {
g.Meta `mime:"application/vnd.ms-excel"`
}

View File

@@ -4,6 +4,7 @@ import (
"context"
"kami/internal/controller/card_info_apple"
"kami/internal/controller/card_info_jd"
"kami/internal/controller/card_info_original_jd"
"kami/internal/controller/card_info_t_mall_game"
"kami/internal/controller/card_info_walmart"
monitorCtrl "kami/internal/controller/monitor"
@@ -62,6 +63,7 @@ var Main = gcmd.Command{
group.Bind(card_info_jd.NewV1())
group.Bind(restriction.NewV1())
group.Bind(card_info_walmart.NewV1())
group.Bind(card_info_original_jd.NewV1())
})
monitor.Register(ctx) // 注册监控任务
cron.Register(ctx) // 注册轮询任务

View File

@@ -3,9 +3,10 @@ package consts
type CardRedeemAccountCategory string
const (
CardRedeemAccountCategoryWalMart CardRedeemAccountCategory = "walmart"
CardRedeemAccountCategoryJD CardRedeemAccountCategory = "jd"
CardRedeemAccountCategoryApple CardRedeemAccountCategory = "apple"
CardRedeemAccountCategoryWalMart CardRedeemAccountCategory = "walmart"
CardRedeemAccountCategoryJD CardRedeemAccountCategory = "jd"
CardRedeemAccountCategoryApple CardRedeemAccountCategory = "apple"
CardRedeemAccountCategoryOriginalJD CardRedeemAccountCategory = "originalJD"
)
func (c CardRedeemAccountCategory) Name() string {

View File

@@ -0,0 +1,5 @@
// =================================================================================
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
// =================================================================================
package card_info_original_jd

View File

@@ -0,0 +1,15 @@
// =================================================================================
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
// =================================================================================
package card_info_original_jd
import (
"kami/api/card_info_original_jd"
)
type ControllerV1 struct{}
func NewV1() card_info_original_jd.ICardInfoOriginalJdV1 {
return &ControllerV1{}
}

View File

@@ -0,0 +1,51 @@
package card_info_original_jd
import (
"bytes"
"context"
"fmt"
"github.com/duke-git/lancet/v2/slice"
"github.com/gogf/gf/v2/frame/g"
"github.com/xuri/excelize/v2"
"kami/internal/consts"
"kami/internal/errHandler"
"kami/internal/model/entity"
"kami/internal/service"
"github.com/gogf/gf/v2/errors/gcode"
"kami/api/card_info_original_jd/v1"
)
func (c *ControllerV1) OriginalDownload(ctx context.Context, req *v1.OriginalDownloadReq) (res *v1.OriginalDownloadRes, err error) {
userInfo, err := service.SysAuth().LoginOnlyIFrame(ctx)
if err != nil {
err = errHandler.WrapError(ctx, gcode.CodeNotAuthorized, err, "权限不足")
return
}
data, err := service.CardRedeemAccount().GetAllByUserId(ctx, userInfo.Id, consts.CardRedeemAccountCategoryOriginalJD, nil)
if err != nil {
err = errHandler.WrapError(ctx, gcode.CodeInternalError, err, "下载失败")
return
}
excel := excelize.NewFile()
sw, _ := excel.NewStreamWriter("Sheet1")
err = sw.SetRow("A1", []interface{}{
"昵称", "cookie", "余额", "今日充值金额", "今日充值次数",
"累计充值金额", "累计充值次数", "状态", "创建时间",
})
slice.ForEach(data, func(index int, item *entity.V1CardRedeemAccountInfo) {
_ = sw.SetRow(fmt.Sprintf("A%d", index+2), []interface{}{
item.Nickname, item.Cookie, item.Balance, item.AmountTodaySum, item.AmountTodayCount, item.AmountTotalSum, item.AmountTodayCount,
consts.JDAccountStatus(item.Status).GetStatusText(), item.CreatedAt,
})
})
_ = sw.Flush()
var buffer bytes.Buffer
_ = excel.Write(&buffer)
_ = excel.Close()
g.RequestFromCtx(ctx).Response.Header().Add("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
g.RequestFromCtx(ctx).Response.Header().Add("Content-Disposition", "attachment; filename=apple_card_info_v1_recharge_list_download.xlsx")
g.RequestFromCtx(ctx).Response.WriteOverExit(buffer.Bytes())
g.RequestFromCtx(ctx).Response.Flush()
return
}

View File

@@ -0,0 +1,21 @@
package card_info_original_jd
import (
"context"
"github.com/gogf/gf/v2/errors/gcode"
"github.com/gogf/gf/v2/frame/g"
"kami/internal/errHandler"
"kami/internal/service"
"kami/api/card_info_original_jd/v1"
)
func (c *ControllerV1) OriginalDownloadTemplate(ctx context.Context, req *v1.OriginalDownloadTemplateReq) (res *v1.OriginalDownloadTemplateRes, err error) {
_, err = service.SysAuth().LoginOnlyIFrame(ctx)
if err != nil {
err = errHandler.WrapError(ctx, gcode.CodeNotAuthorized, err, "权限不足")
return
}
g.RequestFromCtx(ctx).Response.ServeFileDownload("./resource/public/CK导入通用模板.xlsx")
return
}

View File

@@ -0,0 +1,55 @@
package card_info_original_jd
import (
"context"
"github.com/gogf/gf/v2/os/glog"
"github.com/gogf/gf/v2/os/gtime"
"github.com/gogf/gf/v2/text/gstr"
"kami/internal/consts"
"kami/internal/errHandler"
"kami/internal/model"
"kami/internal/service"
redeemModel "kami/utility/integration/redeem"
redeem "kami/utility/integration/redeem/client"
"github.com/gogf/gf/v2/errors/gcode"
"kami/api/card_info_original_jd/v1"
)
func (c *ControllerV1) OriginalJDAccountCookieBatchAdd(ctx context.Context, req *v1.OriginalJDAccountCookieBatchAddReq) (res *v1.OriginalJDAccountCookieBatchAddRes, err error) {
userInfo, err := service.SysAuth().LoginOnlyIFrame(ctx)
if err != nil {
err = errHandler.WrapError(ctx, gcode.CodeNotAuthorized, err, "权限不足")
return
}
for _, info := range req.List {
client, err2 := redeem.GetClient(consts.CardRedeemAccountCategoryOriginalJD)
if err2 != nil {
glog.Error(ctx, "获取客户端失败", err2)
return
}
cookieUserInfo, err2 := client.QueryUserInfoWithCache(ctx, gstr.Trim(info.Cookie), gtime.M*30)
if err2 != nil || !cookieUserInfo.Ok {
continue
}
balanceInfo, err2 := client.QueryBalanceWithCache(ctx, &redeemModel.QueryBalanceReq{
Cookie: gstr.Trim(info.Cookie),
}, gtime.M*30)
if err2 != nil {
continue
}
_ = service.CardRedeemAccount().Add(ctx, &model.RedeemAccountAddInput{
Cookie: gstr.Trim(info.Cookie),
Name: info.Name,
MaxAmountLimit: info.MaxAmountLimit,
MaxCountLimit: info.MaxCountLimit,
Username: cookieUserInfo.Username,
Nickname: cookieUserInfo.NickName,
Balance: balanceInfo.Money,
UserId: userInfo.Id,
Category: consts.CardRedeemAccountCategoryOriginalJD,
}, nil)
}
_ = service.CardRedeemOrder().TriggerValidateAndConsume()
return
}

View File

@@ -0,0 +1,95 @@
package card_info_original_jd
import (
"context"
"github.com/duke-git/lancet/v2/pointer"
"github.com/duke-git/lancet/v2/slice"
"github.com/gogf/gf/v2/os/glog"
"github.com/gogf/gf/v2/os/gtime"
"github.com/gogf/gf/v2/util/gconv"
"github.com/xuri/excelize/v2"
"kami/internal/consts"
"kami/internal/errHandler"
"kami/internal/service"
redeemModel "kami/utility/integration/redeem"
redeem "kami/utility/integration/redeem/client"
"github.com/gogf/gf/v2/errors/gcode"
"kami/api/card_info_original_jd/v1"
)
func (c *ControllerV1) OriginalJDAccountCookieBatchCheck(ctx context.Context, req *v1.OriginalJDAccountCookieBatchCheckReq) (res *v1.OriginalJDAccountCookieBatchCheckRes, err error) {
_, err = service.SysAuth().LoginOnlyIFrame(ctx)
if err != nil {
err = errHandler.WrapError(ctx, gcode.CodeNotAuthorized, err, "权限不足")
return
}
res = &v1.OriginalJDAccountCookieBatchCheckRes{}
_, err = service.SysAuth().LoginOnlyLogin(ctx)
if err != nil {
err = errHandler.WrapError(ctx, gcode.CodeNotAuthorized, err, "权限不足")
return
}
f, err := req.File.Open()
if err != nil {
err = errHandler.WrapError(ctx, errHandler.ErrFileBroken, err, "")
return
}
xlsx, err := excelize.OpenReader(f)
if err != nil {
err = errHandler.WrapError(ctx, errHandler.ErrFileBroken, err, "")
return
}
if len(xlsx.GetSheetList()) == 0 {
err = errHandler.WrapError(ctx, errHandler.ErrFileBroken, err, "")
return
}
rows, err := xlsx.GetRows(xlsx.GetSheetList()[0])
if len(rows) <= 1 {
res = &v1.OriginalJDAccountCookieBatchCheckRes{
Msg: "文件中没有数据",
}
return
}
cks := make([]*v1.OriginalJDAccountCookieBatchInfo, 0)
slice.ForEachConcurrent(rows, func(index int, item []string) {
if len(item) < 3 || index == 0 {
return
}
name := item[0]
ck := item[1]
amountLimit := item[2]
countLimit := item[3]
data := &v1.OriginalJDAccountCookieBatchInfo{
Name: name,
Cookie: ck,
MaxAmountLimit: gconv.Int(amountLimit),
MaxCountLimit: gconv.Int(countLimit),
}
client, err2 := redeem.GetClient(consts.CardRedeemAccountCategoryOriginalJD)
if err2 != nil {
glog.Error(ctx, "获取客户端失败", err2)
return
}
result, err2 := client.QueryUserInfoWithCache(ctx, ck, gtime.M*10)
if err2 == nil {
data.Username = result.Username
data.Nickname = result.NickName
data.IsAvailable = result.Ok
existJdUserInfo, _ := service.CardRedeemAccount().GetNormalOneByUsername(ctx, data.Username, consts.CardRedeemAccountCategoryOriginalJD)
if !pointer.IsNil(existJdUserInfo) && existJdUserInfo.Id != "" {
data.IsExist = true
}
}
balance, err2 := client.QueryBalanceWithCache(ctx, &redeemModel.QueryBalanceReq{
Cookie: ck,
}, gtime.M*10)
if err2 == nil {
data.Balance = balance.Money
}
cks = append(cks, data)
}, 10)
res.List = cks
return
}

View File

@@ -0,0 +1,70 @@
package card_info_original_jd
import (
"context"
"github.com/duke-git/lancet/v2/pointer"
"github.com/gogf/gf/v2/os/glog"
"kami/internal/consts"
"kami/internal/errHandler"
"kami/internal/service"
redeemModel "kami/utility/integration/redeem"
redeem "kami/utility/integration/redeem/client"
"kami/utility/limiter"
"strings"
"github.com/gogf/gf/v2/errors/gcode"
"github.com/gogf/gf/v2/errors/gerror"
"kami/api/card_info_original_jd/v1"
)
func (c *ControllerV1) OriginalJDAccountCookieCheck(ctx context.Context, req *v1.OriginalJDAccountCookieCheckReq) (res *v1.OriginalJDAccountCookieCheckRes, err error) {
_, err = service.SysAuth().LoginOnlyIFrame(ctx)
if err != nil {
err = errHandler.WrapError(ctx, gcode.CodeNotAuthorized, err, "权限不足")
return
}
userInfo, err := service.SysAuth().LoginWithIFrameAndLogin(ctx)
if err != nil {
err = errHandler.WrapError(ctx, gcode.CodeNotAuthorized, err, "权限不足")
return
}
//限流
if !pointer.IsNil(userInfo) && userInfo.Id != "" {
//接口限流同一个ip一分钟内只能访问5次
if !service.Rate().GetSimpleLimiter(ctx, limiter.CardInfoJdAccountCookieChecker, 1, 2).Allow(userInfo.Id) {
return nil, gerror.NewCode(gcode.CodeSecurityReason, "操作过于频繁,请稍后再试")
}
}
res = &v1.OriginalJDAccountCookieCheckRes{
IsAvailable: false,
}
client, err2 := redeem.GetClient(consts.CardRedeemAccountCategoryOriginalJD)
if err2 != nil {
glog.Error(ctx, "获取客户端失败", err2)
return
}
jdUserInfo, err2 := client.QueryUserInfo(ctx, strings.TrimSpace(req.Cookie))
if err2 != nil || pointer.IsNil(jdUserInfo) || !jdUserInfo.Ok {
return
}
res.IsAvailable = true
res.Nickname = jdUserInfo.NickName
res.Username = jdUserInfo.Username
result, err2 := client.QueryBalance(ctx, &redeemModel.QueryBalanceReq{
Cookie: strings.TrimSpace(req.Cookie),
})
if err2 != nil {
return
}
res.Balance = result.Money
existJdUserInfo, _ := service.CardRedeemAccount().GetNormalOneByUsername(ctx, jdUserInfo.Username, consts.CardRedeemAccountCategoryOriginalJD)
if !pointer.IsNil(existJdUserInfo) && existJdUserInfo.Id != "" {
res.IsExist = true
}
return
}

View File

@@ -0,0 +1,65 @@
package card_info_original_jd
import (
"context"
"github.com/duke-git/lancet/v2/pointer"
"github.com/gogf/gf/v2/os/gtime"
"github.com/gogf/gf/v2/text/gstr"
"kami/internal/consts"
"kami/internal/errHandler"
"kami/internal/model"
"kami/internal/service"
redeemModel "kami/utility/integration/redeem"
redeem "kami/utility/integration/redeem/client"
"strings"
"github.com/gogf/gf/v2/errors/gcode"
"github.com/gogf/gf/v2/errors/gerror"
"kami/api/card_info_original_jd/v1"
)
func (c *ControllerV1) OriginalJDAccountCreate(ctx context.Context, req *v1.OriginalJDAccountCreateReq) (res *v1.OriginalJDAccountCreateRes, err error) {
userInfo, err := service.SysAuth().LoginOnlyIFrame(ctx)
if err != nil {
err = errHandler.WrapError(ctx, gcode.CodeNotAuthorized, err, "权限不足")
return
}
req.Cookie = strings.TrimSpace(req.Cookie)
client, err2 := redeem.GetClient(consts.CardRedeemAccountCategoryOriginalJD)
if err2 != nil {
err = errHandler.WrapError(ctx, gcode.CodeInternalError, err2, "获取客户端失败")
return
}
cookieUserInfo, err2 := client.QueryUserInfoWithCache(ctx, gstr.Trim(req.Cookie), gtime.M*10)
if err2 != nil || !cookieUserInfo.Ok {
err = errHandler.WrapError(ctx, gcode.CodeInternalError, err2, "cookie失效")
return
}
existInfo, err2 := service.CardRedeemAccount().GetNormalOneByUsername(ctx, cookieUserInfo.Username, consts.CardRedeemAccountCategoryOriginalJD)
if !pointer.IsNil(existInfo) && existInfo.Id != "" {
err = gerror.NewCode(gcode.CodeValidationFailed, "账号已存在")
return
}
balanceInfo, err2 := client.QueryBalanceWithCache(ctx, &redeemModel.QueryBalanceReq{
Cookie: gstr.Trim(req.Cookie),
}, gtime.M*10)
if err2 != nil || pointer.IsNil(balanceInfo) {
err = gerror.NewCode(gcode.CodeValidationFailed, "查询余额失败")
return
}
if err = service.CardRedeemAccount().Add(ctx, &model.RedeemAccountAddInput{
Cookie: gstr.Trim(req.Cookie),
Name: req.Name,
MaxAmountLimit: req.MaxAmountLimit,
MaxCountLimit: req.MaxCountLimit,
Username: cookieUserInfo.Username,
Nickname: cookieUserInfo.NickName,
Balance: balanceInfo.Money,
UserId: userInfo.Id,
Category: consts.CardRedeemAccountCategoryOriginalJD,
}, nil); err == nil {
_ = service.CardRedeemOrder().TriggerValidateAndConsume()
}
return
}

View File

@@ -0,0 +1,22 @@
package card_info_original_jd
import (
"context"
"kami/internal/consts"
"kami/internal/errHandler"
"kami/internal/service"
"github.com/gogf/gf/v2/errors/gcode"
"kami/api/card_info_original_jd/v1"
)
func (c *ControllerV1) OriginalJDAccountDelete(ctx context.Context, req *v1.OriginalJDAccountDeleteReq) (res *v1.OriginalJDAccountDeleteRes, err error) {
_, err = service.SysAuth().LoginOnlyIFrame(ctx)
if err != nil {
err = errHandler.WrapError(ctx, gcode.CodeNotAuthorized, err, "权限不足")
return
}
accountService := service.CardRedeemAccount()
err = accountService.Delete(ctx, req.ID, consts.CardRedeemAccountCategoryOriginalJD, nil)
return
}

View File

@@ -0,0 +1,46 @@
package card_info_original_jd
import (
"context"
"github.com/jinzhu/copier"
"kami/api/commonApi"
"kami/internal/consts"
"kami/internal/errHandler"
"kami/internal/model"
"kami/internal/service"
"github.com/gogf/gf/v2/errors/gcode"
"kami/api/card_info_original_jd/v1"
)
func (c *ControllerV1) OriginalJDAccountList(ctx context.Context, req *v1.OriginalJDAccountListReq) (res *v1.OriginalJDAccountListRes, err error) {
userInfo, err := service.SysAuth().LoginOnlyIFrame(ctx)
if err != nil {
err = errHandler.WrapError(ctx, gcode.CodeNotAuthorized, err, "权限不足")
return
}
accountService := service.CardRedeemAccount()
total, list, err := accountService.List(ctx, &model.RedeemAccountListInput{
//JDAccountListReq: req,
CommonPageReq: commonApi.CommonPageReq{
Current: req.Current,
PageSize: req.PageSize,
},
Name: req.Name,
NickName: req.NickName,
Cookie: req.Cookie,
Category: consts.CardRedeemAccountCategoryOriginalJD,
UserId: userInfo.Id,
})
res = &v1.OriginalJDAccountListRes{
CommonPageRes: commonApi.CommonPageRes[v1.OriginalJDAccountListRecord]{
Total: total,
CommonDataRes: commonApi.CommonDataRes[v1.OriginalJDAccountListRecord]{
List: make([]v1.OriginalJDAccountListRecord, 0),
},
},
}
_ = copier.CopyWithOption(&res.List, &list, copier.Option{IgnoreEmpty: true, DeepCopy: true})
err = errHandler.WrapError(ctx, gcode.CodeInternalError, err)
return
}

View File

@@ -0,0 +1,16 @@
package card_info_original_jd
import (
"context"
"kami/internal/errHandler"
"github.com/gogf/gf/v2/errors/gcode"
"kami/api/card_info_original_jd/v1"
)
func (c *ControllerV1) OriginalJDAccountRefreshStatus(ctx context.Context, req *v1.OriginalJDAccountRefreshStatusReq) (res *v1.OriginalJDAccountRefreshStatusRes, err error) {
//jdAccountService := service.CardJdAccount()
//err = jdAccountService.ResetCurrentAmount(ctx, req.ID)
err = errHandler.WrapError(ctx, gcode.CodeDbOperationError, err, "修改账号状态失败")
return
}

View File

@@ -0,0 +1,24 @@
package card_info_original_jd
import (
"context"
"kami/api/commonApi"
"kami/internal/model"
"kami/internal/service"
"kami/api/card_info_original_jd/v1"
)
func (c *ControllerV1) OriginalJDAccountUpdate(ctx context.Context, req *v1.OriginalJDAccountUpdateReq) (res *v1.OriginalJDAccountUpdateRes, err error) {
err = service.CardRedeemAccount().Update(ctx, &model.RedeemAccountUpdateInput{
CommonStrId: commonApi.CommonStrId{
ID: req.ID,
},
Status: req.Status,
Name: req.Name,
Remark: req.Remark,
MaxAmountLimit: req.MaxAmountLimit,
MaxCountLimit: req.MaxAmountLimit,
}, nil)
return
}

View File

@@ -0,0 +1,21 @@
package card_info_original_jd
import (
"context"
"github.com/gogf/gf/v2/errors/gcode"
"kami/internal/errHandler"
"kami/internal/service"
"kami/api/card_info_original_jd/v1"
)
func (c *ControllerV1) OriginalJDAccountUpdateStatus(ctx context.Context, req *v1.OriginalJDAccountUpdateStatusReq) (res *v1.OriginalJDAccountUpdateStatusRes, err error) {
_, err = service.SysAuth().LoginOnlyIFrame(ctx)
if err != nil {
err = errHandler.WrapError(ctx, gcode.CodeNotAuthorized, err, "权限不足")
return
}
jdAccountService := service.CardRedeemAccount()
err = jdAccountService.UpdateStatus(ctx, req.ID, req.Status, nil)
return
}

View File

@@ -0,0 +1,31 @@
package card_info_original_jd
import (
"context"
"github.com/gogf/gf/v2/errors/gcode"
"kami/api/commonApi"
"kami/internal/errHandler"
"kami/internal/model"
"kami/internal/service"
"kami/api/card_info_original_jd/v1"
)
func (c *ControllerV1) OriginalJDAccountWalletList(ctx context.Context, req *v1.OriginalJDAccountWalletListReq) (res *v1.OriginalJDAccountWalletListRes, err error) {
_, err = service.SysAuth().LoginOnlyIFrame(ctx)
if err != nil {
err = errHandler.WrapError(ctx, gcode.CodeNotAuthorized, err, "权限不足")
return
}
total, data, err := service.CardRedeemAccount().GetWalletHistory(ctx, &model.RedeemAccountHistoryQueryInput{
CommonPageReq: commonApi.CommonPageReq{
Current: req.Current,
PageSize: req.PageSize,
},
AccountId: req.AccountId,
})
res = &v1.OriginalJDAccountWalletListRes{}
res.List = data
res.Total = total
return
}