feat(card-info): 添加原生京东卡账户相关接口和功能
- 新增原生京东卡账户相关的数据结构和接口定义 - 实现原生京东卡账户的创建、删除、列表查询等功能 - 添加原生京东卡账户的批量导入、导出模板等功能 - 集成原生京东卡账户状态刷新和余额查询功能- 更新系统初始化,注册原生京东卡账户相关控制器
This commit is contained in:
26
api/card_info_original_jd/card_info_original_jd.go
Normal file
26
api/card_info_original_jd/card_info_original_jd.go
Normal 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)
|
||||
}
|
||||
146
api/card_info_original_jd/v1/account.go
Normal file
146
api/card_info_original_jd/v1/account.go
Normal 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"`
|
||||
}
|
||||
@@ -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) // 注册轮询任务
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
@@ -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{}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user