feat(csmanualentry): 手动录单支持收号出号分组
- 录单记录新增组别(收号/出号),唯一约束放宽为编号+组别,同一编号两组各可登记一次 - 操作人选项支持组别标记,录单选中后自动带出组别 - 列表新增组别列与筛选,今日统计按收号/出号分列
This commit is contained in:
@@ -30,6 +30,10 @@ func (s *Service) Create(ctx context.Context, adminID uint64, req CreateRequest)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
entryGroup, err := normalizeEntryGroup(req.EntryGroup)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
platform, err := normalizeOptionName(req.Platform)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -45,7 +49,7 @@ func (s *Service) Create(ctx context.Context, adminID uint64, req CreateRequest)
|
||||
if adminName == "" {
|
||||
adminName = adminUsername
|
||||
}
|
||||
entry, err := s.repo.Create(ctx, adminID, adminName, adminUsername, entryNo, platform, operator, strings.TrimSpace(req.Remark))
|
||||
entry, err := s.repo.Create(ctx, adminID, adminName, adminUsername, entryNo, entryGroup, platform, operator, strings.TrimSpace(req.Remark))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -61,6 +65,10 @@ func (s *Service) Update(ctx context.Context, id uint64, req UpdateRequest) (*En
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
entryGroup, err := normalizeEntryGroup(req.EntryGroup)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
platform, err := normalizeOptionName(req.Platform)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -69,7 +77,7 @@ func (s *Service) Update(ctx context.Context, id uint64, req UpdateRequest) (*En
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return s.repo.Update(ctx, id, entryNo, platform, operator, strings.TrimSpace(req.Remark))
|
||||
return s.repo.Update(ctx, id, entryNo, entryGroup, platform, operator, strings.TrimSpace(req.Remark))
|
||||
}
|
||||
|
||||
// Delete 管理员删除录单记录。
|
||||
@@ -120,7 +128,11 @@ func (s *Service) CreateOption(ctx context.Context, req CreateOptionRequest) (*O
|
||||
if name == "" {
|
||||
return nil, ErrOptionNameInvalid
|
||||
}
|
||||
return s.repo.CreateOption(ctx, optionType, name)
|
||||
groupTag, err := normalizeGroupTag(req.GroupTag)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return s.repo.CreateOption(ctx, optionType, name, groupTag)
|
||||
}
|
||||
|
||||
// UpdateOption 重命名平台 / 操作人选项。
|
||||
@@ -135,7 +147,11 @@ func (s *Service) UpdateOption(ctx context.Context, id uint64, req UpdateOptionR
|
||||
if name == "" {
|
||||
return nil, ErrOptionNameInvalid
|
||||
}
|
||||
return s.repo.UpdateOption(ctx, id, name)
|
||||
groupTag, err := normalizeGroupTag(req.GroupTag)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return s.repo.UpdateOption(ctx, id, name, groupTag)
|
||||
}
|
||||
|
||||
// DeleteOption 删除平台 / 操作人选项。
|
||||
@@ -173,3 +189,21 @@ func normalizeOptionName(raw string) (string, error) {
|
||||
}
|
||||
return value, nil
|
||||
}
|
||||
|
||||
// normalizeEntryGroup 规整录单组别:必填且仅允许 collect / sell。
|
||||
func normalizeEntryGroup(raw string) (string, error) {
|
||||
value := strings.TrimSpace(raw)
|
||||
if !IsValidEntryGroup(value) {
|
||||
return "", ErrEntryGroupInvalid
|
||||
}
|
||||
return value, nil
|
||||
}
|
||||
|
||||
// normalizeGroupTag 规整选项组别标记:允许为空(未分组),否则仅允许 collect / sell。
|
||||
func normalizeGroupTag(raw string) (string, error) {
|
||||
value := strings.TrimSpace(raw)
|
||||
if !IsValidGroupTag(value) {
|
||||
return "", ErrEntryGroupInvalid
|
||||
}
|
||||
return value, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user