暂存一下,防止丢失
This commit is contained in:
@@ -56,147 +56,6 @@ func New(
|
||||
}
|
||||
}
|
||||
|
||||
// ListShopFundSummary 代理商资金概况列表(含预充值余额和佣金钱包)
|
||||
// GET /shops/fund-summary
|
||||
func (s *Service) ListShopFundSummary(ctx context.Context, req *dto.ShopFundSummaryListReq) (*dto.ShopFundSummaryPageResult, error) {
|
||||
opts := &store.QueryOptions{
|
||||
Page: req.Page,
|
||||
PageSize: req.PageSize,
|
||||
OrderBy: "created_at DESC",
|
||||
}
|
||||
if opts.Page == 0 {
|
||||
opts.Page = 1
|
||||
}
|
||||
if opts.PageSize == 0 {
|
||||
opts.PageSize = constants.DefaultPageSize
|
||||
}
|
||||
|
||||
filters := make(map[string]interface{})
|
||||
if req.ShopName != "" {
|
||||
filters["shop_name"] = req.ShopName
|
||||
}
|
||||
|
||||
shops, total, err := s.shopStore.List(ctx, opts, filters)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(errors.CodeInternalError, err, "查询店铺列表失败")
|
||||
}
|
||||
|
||||
if len(shops) == 0 {
|
||||
return &dto.ShopFundSummaryPageResult{
|
||||
Items: []dto.ShopFundSummaryItem{},
|
||||
Total: 0,
|
||||
Page: opts.Page,
|
||||
Size: opts.PageSize,
|
||||
}, nil
|
||||
}
|
||||
|
||||
shopIDs := make([]uint, 0, len(shops))
|
||||
for _, shop := range shops {
|
||||
shopIDs = append(shopIDs, shop.ID)
|
||||
}
|
||||
|
||||
// 批量获取主钱包(预充值钱包)余额
|
||||
mainWallets, err := s.agentWalletStore.GetShopMainWalletBatch(ctx, shopIDs)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(errors.CodeInternalError, err, "查询主钱包余额失败")
|
||||
}
|
||||
|
||||
walletSummaries, err := s.agentWalletStore.GetShopCommissionSummaryBatch(ctx, shopIDs)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(errors.CodeInternalError, err, "查询店铺钱包汇总失败")
|
||||
}
|
||||
|
||||
withdrawnAmounts, err := s.commissionWithdrawalReqStore.SumAmountByShopIDsAndStatus(ctx, shopIDs, constants.WithdrawalStatusApproved)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(errors.CodeInternalError, err, "查询已提现金额失败")
|
||||
}
|
||||
|
||||
withdrawingAmounts, err := s.commissionWithdrawalReqStore.SumAmountByShopIDsAndStatus(ctx, shopIDs, constants.WithdrawalStatusPending)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(errors.CodeInternalError, err, "查询提现中金额失败")
|
||||
}
|
||||
|
||||
primaryAccounts, err := s.accountStore.GetPrimaryAccountsByShopIDs(ctx, shopIDs)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(errors.CodeInternalError, err, "查询主账号失败")
|
||||
}
|
||||
|
||||
accountMap := make(map[uint]*model.Account)
|
||||
for _, acc := range primaryAccounts {
|
||||
if acc.ShopID != nil {
|
||||
accountMap[*acc.ShopID] = acc
|
||||
}
|
||||
}
|
||||
|
||||
items := make([]dto.ShopFundSummaryItem, 0, len(shops))
|
||||
for _, shop := range shops {
|
||||
if req.Username != "" {
|
||||
acc := accountMap[shop.ID]
|
||||
if acc == nil || !containsSubstring(acc.Username, req.Username) {
|
||||
total--
|
||||
continue
|
||||
}
|
||||
}
|
||||
|
||||
item := s.buildFundSummaryItem(shop, mainWallets[shop.ID], walletSummaries[shop.ID], withdrawnAmounts[shop.ID], withdrawingAmounts[shop.ID], accountMap[shop.ID])
|
||||
items = append(items, item)
|
||||
}
|
||||
|
||||
return &dto.ShopFundSummaryPageResult{
|
||||
Items: items,
|
||||
Total: total,
|
||||
Page: opts.Page,
|
||||
Size: opts.PageSize,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// buildFundSummaryItem 构造资金概况条目
|
||||
func (s *Service) buildFundSummaryItem(shop *model.Shop, mainWallet, commissionWallet *model.AgentWallet, withdrawnAmount, withdrawingAmount int64, account *model.Account) dto.ShopFundSummaryItem {
|
||||
// 主钱包余额(若未充值则为0)
|
||||
var mainBalance, mainFrozenBalance int64
|
||||
if mainWallet != nil {
|
||||
mainBalance = mainWallet.Balance
|
||||
mainFrozenBalance = mainWallet.FrozenBalance
|
||||
}
|
||||
|
||||
// 佣金钱包
|
||||
var balance, frozenBalance int64
|
||||
if commissionWallet != nil {
|
||||
balance = commissionWallet.Balance
|
||||
frozenBalance = commissionWallet.FrozenBalance
|
||||
}
|
||||
|
||||
totalCommission := balance + frozenBalance + withdrawnAmount
|
||||
unwithdrawCommission := totalCommission - withdrawnAmount
|
||||
availableCommission := balance - withdrawingAmount
|
||||
if availableCommission < 0 {
|
||||
availableCommission = 0
|
||||
}
|
||||
|
||||
var username, phone string
|
||||
if account != nil {
|
||||
username = account.Username
|
||||
phone = account.Phone
|
||||
}
|
||||
|
||||
return dto.ShopFundSummaryItem{
|
||||
ShopID: shop.ID,
|
||||
ShopName: shop.ShopName,
|
||||
ShopCode: shop.ShopCode,
|
||||
Username: username,
|
||||
Phone: phone,
|
||||
MainBalance: mainBalance,
|
||||
MainFrozenBalance: mainFrozenBalance,
|
||||
TotalCommission: totalCommission,
|
||||
WithdrawnCommission: withdrawnAmount,
|
||||
UnwithdrawCommission: unwithdrawCommission,
|
||||
FrozenCommission: frozenBalance,
|
||||
WithdrawingCommission: withdrawingAmount,
|
||||
AvailableCommission: availableCommission,
|
||||
CreatedAt: shop.CreatedAt.Format("2006-01-02 15:04:05"),
|
||||
}
|
||||
}
|
||||
|
||||
// ListShopWithdrawalRequests 查询代理商提现记录
|
||||
// GET /shops/:id/withdrawal-requests
|
||||
func (s *Service) ListShopWithdrawalRequests(ctx context.Context, shopID uint, req *dto.ShopWithdrawalRequestListReq) (*dto.ShopWithdrawalRequestPageResult, error) {
|
||||
@@ -832,16 +691,3 @@ func generateWithdrawalNo() string {
|
||||
now := time.Now()
|
||||
return fmt.Sprintf("W%s%04d", now.Format("20060102150405"), rand.Intn(10000))
|
||||
}
|
||||
|
||||
func containsSubstring(s, substr string) bool {
|
||||
return len(s) >= len(substr) && (s == substr || len(substr) == 0 || (len(s) > 0 && len(substr) > 0 && contains(s, substr)))
|
||||
}
|
||||
|
||||
func contains(s, substr string) bool {
|
||||
for i := 0; i <= len(s)-len(substr); i++ {
|
||||
if s[i:i+len(substr)] == substr {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user