Files
olons_admin/server/internal/model/input/sysin/trade.go
T

329 lines
14 KiB
Go

package sysin
import (
"context"
"net/url"
"strings"
"hotgo/internal/consts"
"hotgo/internal/model/entity"
"hotgo/internal/model/input/form"
"github.com/gogf/gf/v2/encoding/gjson"
"github.com/gogf/gf/v2/errors/gerror"
"github.com/gogf/gf/v2/os/gtime"
)
type TradeOrderListInp struct {
form.PageReq
OrderNo string `json:"orderNo"`
Username string `json:"username"`
Mobile string `json:"mobile"`
OrderStatus int `json:"orderStatus"`
CreatedAt []*gtime.Time `json:"createdAt"`
}
func (in *TradeOrderListInp) Filter(ctx context.Context) error { return nil }
type TradeOrderListModel struct {
Id uint64 `json:"id"`
OrderNo string `json:"orderNo"`
MemberId uint64 `json:"memberId"`
Username string `json:"username"`
Mobile string `json:"mobile"`
RealNameMask string `json:"realNameMask"`
AutoDispatch int `json:"autoDispatch"`
AvailableAmount int64 `json:"availableAmount"`
FrozenAmount int64 `json:"frozenAmount"`
TodayTradeCount int `json:"todayTradeCount"`
ProductName string `json:"productName"`
OrderType int `json:"orderType"`
Quantity uint `json:"quantity"`
UnitPriceAmount int64 `json:"unitPriceAmount"`
TotalAmount int64 `json:"totalAmount"`
CommissionAmount int64 `json:"commissionAmount"`
Currency string `json:"currency"`
Message string `json:"message"`
OrderStatus int `json:"orderStatus"`
FreezeStatus int `json:"freezeStatus"`
ApprovalRequestId uint64 `json:"approvalRequestId"`
MatchedAt *gtime.Time `json:"matchedAt"`
CompletedAt *gtime.Time `json:"completedAt"`
UnfrozenAt *gtime.Time `json:"unfrozenAt"`
CreatedAt *gtime.Time `json:"createdAt"`
ApprovalStatus int `json:"approvalStatus"`
CanMatch bool `json:"canMatch"`
CanReview bool `json:"canReview"`
CanApply bool `json:"canApply"`
CanExecute bool `json:"canExecute"`
}
type TradeOrderViewInp struct {
Id uint64 `json:"id" v:"required|min:1#订单ID不能为空|订单ID不能为空"`
}
func (in *TradeOrderViewInp) Filter(ctx context.Context) error { return nil }
type TradeOrderViewModel struct {
TradeOrderListModel
TaskId uint64 `json:"taskId"`
ProductId uint64 `json:"productId"`
MemberLevelId uint64 `json:"memberLevelId"`
RuleSnapshot *gjson.Json `json:"ruleSnapshot"`
}
type TradeOrderApplyInp struct {
Id uint64 `json:"id" v:"required|min:1#订单ID不能为空|订单ID不能为空"`
Action string `json:"action" v:"required|in:cancel_match,rematch,unfreeze#处理动作不能为空|处理动作不合法"`
ReasonCode string `json:"reasonCode" v:"required|max-length:64#原因编码不能为空|原因编码不能超过64个字符"`
ReasonText string `json:"reasonText" v:"required|max-length:500#原因说明不能为空|原因说明不能超过500个字符"`
}
func (in *TradeOrderApplyInp) Filter(ctx context.Context) error { return nil }
type TradeOrderExecuteInp struct {
ApprovalId uint64 `json:"approvalId" v:"required|min:1#审批ID不能为空|审批ID不能为空"`
}
func (in *TradeOrderExecuteInp) Filter(ctx context.Context) error { return nil }
type TradeOrderMatchProductListInp struct {
form.PageReq
Name string `json:"name" dc:"商品名称"`
PriceMin string `json:"priceMin" dc:"最低价格"`
PriceMax string `json:"priceMax" dc:"最高价格"`
}
func (in *TradeOrderMatchProductListInp) Filter(ctx context.Context) error { return nil }
type TradeOrderMatchProductModel struct {
Id uint64 `json:"id"`
Name string `json:"name"`
CoverUrl string `json:"coverUrl"`
PriceAmount int64 `json:"priceAmount"`
}
type TradeOrderMatchInp struct {
Id uint64 `json:"id" v:"required|min:1#订单ID不能为空|订单ID不能为空"`
ProductId uint64 `json:"productId" v:"required|min:1#请选择商品|请选择商品"`
Quantity uint `json:"quantity" v:"required|min:1|max:999#商品数量不能为空|商品数量最少为1|商品数量不能超过999"`
}
func (in *TradeOrderMatchInp) Filter(ctx context.Context) error { return nil }
type FinanceApprovalModel struct {
ApprovalId uint64 `json:"approvalId"`
ApprovalNo string `json:"approvalNo"`
}
type RechargeOrderListInp struct {
form.PageReq
RechargeNo string `json:"rechargeNo"`
Username string `json:"username"`
Mobile string `json:"mobile"`
RechargeStatus int `json:"rechargeStatus"`
ChannelId uint64 `json:"channelId"`
ChannelName string `json:"channelName"`
CreatedAt []*gtime.Time `json:"createdAt"`
}
func (in *RechargeOrderListInp) Filter(ctx context.Context) error { return nil }
type RechargeOrderListModel struct {
Id uint64 `json:"id"`
RechargeNo string `json:"rechargeNo"`
MemberId uint64 `json:"memberId"`
Username string `json:"username"`
Mobile string `json:"mobile"`
RealNameMask string `json:"realNameMask"`
AvailableAmount int64 `json:"availableAmount"`
ChannelId uint64 `json:"channelId"`
ChannelName string `json:"channelName"`
RequestAmount int64 `json:"requestAmount"`
PaidAmount int64 `json:"paidAmount"`
Currency string `json:"currency"`
ExternalNo string `json:"externalNo"`
VoucherAttachmentIds *gjson.Json `json:"voucherAttachmentIds"`
RechargeType int `json:"rechargeType"`
RechargeStatus int `json:"rechargeStatus"`
Remark string `json:"remark"`
ReviewReasonCode string `json:"reviewReasonCode"`
ReviewReason string `json:"reviewReason"`
ApprovalRequestId uint64 `json:"approvalRequestId"`
LedgerId uint64 `json:"ledgerId"`
PaidAt *gtime.Time `json:"paidAt"`
ReviewedAt *gtime.Time `json:"reviewedAt"`
CreditedAt *gtime.Time `json:"creditedAt"`
CreatedAt *gtime.Time `json:"createdAt"`
}
type RechargeSummaryModel struct {
TotalCount int64 `json:"totalCount"`
TotalAmount int64 `json:"totalAmount"`
PaidCount int64 `json:"paidCount"`
PaidAmount int64 `json:"paidAmount"`
UnpaidCount int64 `json:"unpaidCount"`
UnpaidAmount int64 `json:"unpaidAmount"`
ReviewCount int64 `json:"reviewCount"`
ReviewAmount int64 `json:"reviewAmount"`
RejectedCount int64 `json:"rejectedCount"`
RejectedAmount int64 `json:"rejectedAmount"`
}
type RechargeOrderViewInp struct {
Id uint64 `json:"id" v:"required|min:1#充值单ID不能为空|充值单ID不能为空"`
}
func (in *RechargeOrderViewInp) Filter(ctx context.Context) error { return nil }
type RechargeReviewInp struct {
Id uint64 `json:"id" v:"required|min:1#充值单ID不能为空|充值单ID不能为空"`
Decision int `json:"decision" v:"required|in:1,2#审核结论不能为空|审核结论不合法"`
PaidAmount int64 `json:"paidAmount" v:"min:0#实付金额不能小于0"`
ExternalNo string `json:"externalNo" v:"max-length:128#外部单号不能超过128个字符"`
ReasonCode string `json:"reasonCode" v:"required|max-length:64#原因编码不能为空|原因编码不能超过64个字符"`
ReasonText string `json:"reasonText" v:"max-length:500#审核说明不能超过500个字符"`
}
func (in *RechargeReviewInp) Filter(ctx context.Context) error {
if in.Decision == consts.FinanceDecisionApprove && in.PaidAmount <= 0 {
return gerror.New("审核通过时实付金额必须大于0")
}
return nil
}
type FinanceExecuteInp struct {
ApprovalId uint64 `json:"approvalId" v:"required|min:1#审批ID不能为空|审批ID不能为空"`
}
func (in *FinanceExecuteInp) Filter(ctx context.Context) error { return nil }
type WithdrawalOrderListInp struct {
form.PageReq
WithdrawalNo string `json:"withdrawalNo"`
Username string `json:"username"`
Mobile string `json:"mobile"`
WithdrawalStatus int `json:"withdrawalStatus"`
CreatedAt []*gtime.Time `json:"createdAt"`
}
func (in *WithdrawalOrderListInp) Filter(ctx context.Context) error { return nil }
type WithdrawalOrderListModel struct {
Id uint64 `json:"id"`
WithdrawalNo string `json:"withdrawalNo"`
MemberId uint64 `json:"memberId"`
Username string `json:"username"`
Mobile string `json:"mobile"`
AvailableAmount int64 `json:"availableAmount"`
FrozenAmount int64 `json:"frozenAmount"`
RequestAmount int64 `json:"requestAmount"`
FeeAmount int64 `json:"feeAmount"`
ActualAmount int64 `json:"actualAmount"`
Currency string `json:"currency"`
AccountMask string `json:"accountMask"`
BankName string `json:"bankName"`
HolderMask string `json:"holderMask"`
PaymentAccountType int `json:"paymentAccountType"`
QrCodeUrl string `json:"qrCodeUrl"`
RiskResult *gjson.Json `json:"riskResult"`
WithdrawalStatus int `json:"withdrawalStatus"`
ReviewReasonCode string `json:"reviewReasonCode"`
ReviewReason string `json:"reviewReason"`
ApprovalRequestId uint64 `json:"approvalRequestId"`
ExternalNo string `json:"externalNo"`
FreezeLedgerId uint64 `json:"freezeLedgerId"`
FinalLedgerId uint64 `json:"finalLedgerId"`
ReviewedAt *gtime.Time `json:"reviewedAt"`
ProcessedAt *gtime.Time `json:"processedAt"`
CompletedAt *gtime.Time `json:"completedAt"`
CreatedAt *gtime.Time `json:"createdAt"`
}
type WithdrawalOrderViewInp struct {
Id uint64 `json:"id" v:"required|min:1#提现单ID不能为空|提现单ID不能为空"`
}
func (in *WithdrawalOrderViewInp) Filter(ctx context.Context) error { return nil }
type WithdrawalReviewInp struct {
Id uint64 `json:"id" v:"required|min:1#提现单ID不能为空|提现单ID不能为空"`
Decision int `json:"decision" v:"required|in:1,2#审核结论不能为空|审核结论不合法"`
ReasonCode string `json:"reasonCode" v:"required|max-length:64#原因编码不能为空|原因编码不能超过64个字符"`
ReasonText string `json:"reasonText" v:"required|max-length:500#审核说明不能为空|审核说明不能超过500个字符"`
}
func (in *WithdrawalReviewInp) Filter(ctx context.Context) error { return nil }
type WithdrawalCompleteInp struct {
Id uint64 `json:"id" v:"required|min:1#提现单ID不能为空|提现单ID不能为空"`
Success bool `json:"success"`
ExternalNo string `json:"externalNo" v:"max-length:128#外部单号不能超过128个字符"`
ReasonText string `json:"reasonText" v:"required|max-length:500#处理说明不能为空|处理说明不能超过500个字符"`
}
func (in *WithdrawalCompleteInp) Filter(ctx context.Context) error {
if in.Success && strings.TrimSpace(in.ExternalNo) == "" {
return gerror.New("付款成功时外部付款单号不能为空")
}
return nil
}
type CustomerServiceListInp struct {
form.PageReq
Name string `json:"name"`
Status int `json:"status"`
}
func (in *CustomerServiceListInp) Filter(ctx context.Context) error { return nil }
type CustomerServiceEditInp struct {
Id uint64 `json:"id"`
ServiceCode string `json:"serviceCode" v:"required|max-length:32#客服编码不能为空|客服编码不能超过32个字符"`
Name string `json:"name" v:"required|max-length:100#客服名称不能为空|客服名称不能超过100个字符"`
AvatarUrl string `json:"avatarUrl" v:"max-length:1000#头像地址不能超过1000个字符"`
WorkTime string `json:"workTime" v:"required|max-length:200#工作时间不能为空|工作时间不能超过200个字符"`
OnlineStatus int `json:"onlineStatus" v:"required|in:1,2#在线状态不能为空|在线状态不合法"`
ServiceUrl string `json:"serviceUrl" v:"required|max-length:1000#客服链接不能为空|客服链接不能超过1000个字符"`
BackupContact string `json:"backupContact" v:"required|max-length:500#备用联系方式不能为空|备用联系方式不能超过500个字符"`
SessionMapping *gjson.Json `json:"sessionMapping"`
Status int `json:"status" d:"1" v:"required|in:1,2#状态不能为空|状态不合法"`
Sort int `json:"sort"`
Remark string `json:"remark" v:"max-length:500#备注不能超过500个字符"`
}
func (in *CustomerServiceEditInp) Filter(ctx context.Context) error {
u, err := url.Parse(in.ServiceUrl)
if err != nil || !strings.EqualFold(u.Scheme, "https") || u.Host == "" {
return gerror.New("客服链接必须是有效的 HTTPS 地址")
}
if in.OnlineStatus != consts.CustomerServiceOnline && in.OnlineStatus != consts.CustomerServiceOffline {
return gerror.New("客服在线状态不合法")
}
return nil
}
type CustomerServiceViewInp struct {
Id uint64 `json:"id" v:"required|min:1#客服ID不能为空|客服ID不能为空"`
}
func (in *CustomerServiceViewInp) Filter(ctx context.Context) error { return nil }
type CustomerServiceStatusInp struct {
Id uint64 `json:"id" v:"required|min:1#客服ID不能为空|客服ID不能为空"`
Status int `json:"status" v:"required|in:1,2#状态不能为空|状态不合法"`
}
func (in *CustomerServiceStatusInp) Filter(ctx context.Context) error { return nil }
type CustomerServiceDeleteInp struct {
Id uint64 `json:"id" v:"required|min:1#客服ID不能为空|客服ID不能为空"`
Reason string `json:"reason" v:"required|max-length:500#删除原因不能为空|删除原因不能超过500个字符"`
}
func (in *CustomerServiceDeleteInp) Filter(ctx context.Context) error { return nil }
type CustomerServiceListModel struct {
*entity.CustomerService
}