Files
hfb_sys/backend/internal/modules/csmanualentry/dto.go
T
yml2213 e027f88fbb feat(csmanualentry): 手动录单支持收号出号分组
- 录单记录新增组别(收号/出号),唯一约束放宽为编号+组别,同一编号两组各可登记一次
- 操作人选项支持组别标记,录单选中后自动带出组别
- 列表新增组别列与筛选,今日统计按收号/出号分列
2026-11-06 14:02:28 +08:00

122 lines
3.8 KiB
Go

package csmanualentry
import "time"
// 录单选项类型。
const (
OptionTypePlatform = "platform" // 平台
OptionTypeOperator = "operator" // 操作人
)
// 录单组别。
const (
EntryGroupCollect = "collect" // 收号
EntryGroupSell = "sell" // 出号
)
// CreateRequest 客服手动录单请求。
type CreateRequest struct {
EntryNo string `json:"entry_no" binding:"required"`
EntryGroup string `json:"entry_group" binding:"required"`
Platform string `json:"platform"`
Operator string `json:"operator"`
Remark string `json:"remark"`
}
// UpdateRequest 管理员修正录单请求。
type UpdateRequest struct {
EntryNo string `json:"entry_no" binding:"required"`
EntryGroup string `json:"entry_group" binding:"required"`
Platform string `json:"platform"`
Operator string `json:"operator"`
Remark string `json:"remark"`
}
// EntryDTO 录单记录。
type EntryDTO struct {
ID uint64 `json:"id"`
EntryNo string `json:"entry_no"`
EntryGroup string `json:"entry_group"`
Platform string `json:"platform"`
Operator string `json:"operator"`
AdminID uint64 `json:"admin_id"`
AdminName string `json:"admin_name"`
AdminUsername string `json:"admin_username"`
Remark string `json:"remark"`
CreatedAt time.Time `json:"created_at"`
}
// ListQuery 录单查询条件。
type ListQuery struct {
EntryNo string
EntryGroup string
Keyword string
AdminID uint64
StartDate string // YYYY-MM-DD(北京时间,闭区间)
EndDate string // YYYY-MM-DD(北京时间,闭区间)
Page int
PageSize int
}
// PaginatedResult 分页结果。
type PaginatedResult struct {
Items []EntryDTO `json:"items"`
Total int64 `json:"total"`
Page int `json:"page"`
PageSize int `json:"page_size"`
}
// AgentDayStatsDTO 某客服某日录单统计(按组分列)。
type AgentDayStatsDTO struct {
Date string `json:"date"` // YYYY-MM-DD(北京时间)
AdminID uint64 `json:"admin_id"`
AdminName string `json:"admin_name"`
Count int64 `json:"count"` // 总录单量
CollectCount int64 `json:"collect_count"` // 收号录单量
SellCount int64 `json:"sell_count"` // 出号录单量
}
// CreateResult 录单结果。
type CreateResult struct {
Entry EntryDTO `json:"entry"`
}
// OptionDTO 录单可选项(平台 / 操作人)。
type OptionDTO struct {
ID uint64 `json:"id"`
Type string `json:"type"`
Name string `json:"name"`
GroupTag string `json:"group_tag"` // 操作人组别标记:collect/sell/空
SortOrder int `json:"sort_order"`
CreatedAt time.Time `json:"created_at"`
}
// OptionListDTO 平台与操作人选项集合,供录单表单下拉直接使用。
type OptionListDTO struct {
Platforms []OptionDTO `json:"platforms"`
Operators []OptionDTO `json:"operators"`
}
// CreateOptionRequest 新增平台 / 操作人选项。
type CreateOptionRequest struct {
Type string `json:"type" binding:"required"`
Name string `json:"name" binding:"required"`
GroupTag string `json:"group_tag"` // 仅操作人类型可用,collect/sell/空
}
// UpdateOptionRequest 重命名平台 / 操作人选项(可同时更新组别标记)。
type UpdateOptionRequest struct {
Name string `json:"name" binding:"required"`
GroupTag string `json:"group_tag"` // 仅操作人类型可用,collect/sell/空
}
// IsValidEntryGroup 判断组别取值是否合法。
func IsValidEntryGroup(group string) bool {
return group == EntryGroupCollect || group == EntryGroupSell
}
// IsValidGroupTag 判断选项组别标记是否合法(允许为空表示未分组)。
func IsValidGroupTag(tag string) bool {
return tag == "" || IsValidEntryGroup(tag)
}