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) }