draft
This commit is contained in:
50
backend/pkg/sequence/sequence.go
Normal file
50
backend/pkg/sequence/sequence.go
Normal file
@@ -0,0 +1,50 @@
|
||||
package sequence
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"pay-bridge/internal/model"
|
||||
"pay-bridge/internal/repository"
|
||||
)
|
||||
|
||||
// Service 订单编码服务
|
||||
type Service struct {
|
||||
repo *repository.SequenceRepository
|
||||
}
|
||||
|
||||
func NewService(repo *repository.SequenceRepository) *Service {
|
||||
return &Service{repo: repo}
|
||||
}
|
||||
|
||||
// NextTradeNo 生成下一个交易号,格式:PAY{yyMMdd}{8位序号}
|
||||
func (s *Service) NextTradeNo(ctx context.Context, appID string) (string, error) {
|
||||
return s.next(ctx, appID, model.SeqTypeTrade)
|
||||
}
|
||||
|
||||
// NextRefundNo 生成下一个退款单号,格式:REF{yyMMdd}{8位序号}
|
||||
func (s *Service) NextRefundNo(ctx context.Context, appID string) (string, error) {
|
||||
return s.next(ctx, appID, model.SeqTypeRefund)
|
||||
}
|
||||
|
||||
// NextSharingNo 生成下一个分润单号,格式:SHA{yyMMdd}{8位序号}
|
||||
func (s *Service) NextSharingNo(ctx context.Context, appID string) (string, error) {
|
||||
return s.next(ctx, appID, model.SeqTypeSharing)
|
||||
}
|
||||
|
||||
func (s *Service) next(ctx context.Context, appID string, seqType model.SeqType) (string, error) {
|
||||
val, err := s.repo.IncrAndGet(ctx, appID, seqType)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
prefix, err := s.repo.GetPrefix(ctx, appID, seqType)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
date := time.Now().Format("060102") // yyMMdd
|
||||
seq := fmt.Sprintf("%08d", val%100_000_000) // 8 位,溢出归零(每日最多1亿笔)
|
||||
return prefix + date + seq, nil
|
||||
}
|
||||
Reference in New Issue
Block a user