fix: 修复新建店铺未初始化代理钱包导致充值订单报错
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m6s

新建店铺时在 shop.Service.Create() 中自动初始化主钱包(main)和分佣钱包(commission),修复充值订单创建时「目标店铺主钱包不存在」错误

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
2026-03-17 14:08:26 +08:00
parent 3e8f613475
commit b44363b335
2 changed files with 30 additions and 1 deletions

View File

@@ -106,7 +106,7 @@ func initServices(s *stores, deps *Dependencies) *services {
Role: roleSvc.New(s.Role, s.Permission, s.RolePermission), Role: roleSvc.New(s.Role, s.Permission, s.RolePermission),
Permission: permissionSvc.New(s.Permission, s.AccountRole, s.RolePermission, account, deps.Redis), Permission: permissionSvc.New(s.Permission, s.AccountRole, s.RolePermission, account, deps.Redis),
PersonalCustomer: personalCustomerSvc.NewService(s.PersonalCustomer, s.PersonalCustomerPhone, deps.VerificationService, deps.JWTManager, deps.WechatOfficialAccount, deps.Logger), PersonalCustomer: personalCustomerSvc.NewService(s.PersonalCustomer, s.PersonalCustomerPhone, deps.VerificationService, deps.JWTManager, deps.WechatOfficialAccount, deps.Logger),
Shop: shopSvc.New(s.Shop, s.Account, s.ShopRole, s.Role, s.AccountRole), Shop: shopSvc.New(s.Shop, s.Account, s.ShopRole, s.Role, s.AccountRole, s.AgentWallet),
Auth: authSvc.New(s.Account, s.AccountRole, s.RolePermission, s.Permission, s.Shop, deps.TokenManager, deps.Logger), Auth: authSvc.New(s.Account, s.AccountRole, s.RolePermission, s.Permission, s.Shop, deps.TokenManager, deps.Logger),
ShopCommission: shopCommissionSvc.New(s.Shop, s.Account, s.AgentWallet, s.CommissionWithdrawalRequest, s.CommissionRecord), ShopCommission: shopCommissionSvc.New(s.Shop, s.Account, s.AgentWallet, s.CommissionWithdrawalRequest, s.CommissionRecord),
CommissionWithdrawal: commissionWithdrawalSvc.New(deps.DB, s.Shop, s.Account, s.AgentWallet, s.AgentWalletTransaction, s.CommissionWithdrawalRequest), CommissionWithdrawal: commissionWithdrawalSvc.New(deps.DB, s.Shop, s.Account, s.AgentWallet, s.AgentWalletTransaction, s.CommissionWithdrawalRequest),

View File

@@ -20,6 +20,7 @@ type Service struct {
shopRoleStore *postgres.ShopRoleStore shopRoleStore *postgres.ShopRoleStore
roleStore *postgres.RoleStore roleStore *postgres.RoleStore
accountRoleStore *postgres.AccountRoleStore accountRoleStore *postgres.AccountRoleStore
agentWalletStore *postgres.AgentWalletStore
} }
func New( func New(
@@ -28,6 +29,7 @@ func New(
shopRoleStore *postgres.ShopRoleStore, shopRoleStore *postgres.ShopRoleStore,
roleStore *postgres.RoleStore, roleStore *postgres.RoleStore,
accountRoleStore *postgres.AccountRoleStore, accountRoleStore *postgres.AccountRoleStore,
agentWalletStore *postgres.AgentWalletStore,
) *Service { ) *Service {
return &Service{ return &Service{
shopStore: shopStore, shopStore: shopStore,
@@ -35,6 +37,7 @@ func New(
shopRoleStore: shopRoleStore, shopRoleStore: shopRoleStore,
roleStore: roleStore, roleStore: roleStore,
accountRoleStore: accountRoleStore, accountRoleStore: accountRoleStore,
agentWalletStore: agentWalletStore,
} }
} }
@@ -147,6 +150,32 @@ func (s *Service) Create(ctx context.Context, req *dto.CreateShopRequest) (*dto.
return nil, errors.Wrap(errors.CodeInternalError, err, "设置店铺默认角色失败") return nil, errors.Wrap(errors.CodeInternalError, err, "设置店铺默认角色失败")
} }
// 初始化店铺代理钱包:主钱包 + 分佣钱包
// 新店铺必须有两个钱包才能参与充值和分佣体系
wallets := []*model.AgentWallet{
{
ShopID: shop.ID,
WalletType: constants.AgentWalletTypeMain,
Balance: 0,
Currency: "CNY",
Status: constants.AgentWalletStatusNormal,
ShopIDTag: shop.ID,
},
{
ShopID: shop.ID,
WalletType: constants.AgentWalletTypeCommission,
Balance: 0,
Currency: "CNY",
Status: constants.AgentWalletStatusNormal,
ShopIDTag: shop.ID,
},
}
for _, wallet := range wallets {
if err := s.agentWalletStore.Create(ctx, wallet); err != nil {
return nil, errors.Wrap(errors.CodeInternalError, err, "初始化店铺钱包失败")
}
}
return &dto.ShopResponse{ return &dto.ShopResponse{
ID: shop.ID, ID: shop.ID,
ShopName: shop.ShopName, ShopName: shop.ShopName,