Files
servicebase/pkg/dto/request/DispatchOrderRequest.go
2025-11-19 14:24:13 +08:00

132 lines
3.4 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package request
import (
"encoding/json"
"errors"
"gitea.ddegame.cn/open/servicebase/pkg/common/HyTools"
"github.com/shopspring/decimal"
)
// 派单请求
type DispatchOrderRequest struct {
BaseRequest
GuildId string // 公会ID
ChatroomId string // 聊天室ID
SkillId string // 技能ID
SkillMode string // 玩法
SkillLevel string // 等级
SkillService string // 单子类型
Gender string // 性别
Hours string // 时长
ConfigId string // 配置ID
CustomerRequirement string // 用户需求
}
// 判断decimal是否是0.5的倍数
func isHalfMultiple(d decimal.Decimal) bool {
// 乘以2后检查是否为整数
multiplied := d.Mul(decimal.NewFromInt(2))
// 将整数部分转换为decimal类型后再比较
intPart := decimal.NewFromInt(multiplied.IntPart())
return multiplied.Equal(intPart)
}
// 签名验证
func (request *DispatchOrderRequest) CheckParameter() (err error) {
if len(request.AccessToken) == 0 {
err = errors.New("AccessToken不能为空")
return
}
if len(request.SkillId) == 0 {
err = errors.New("SkillId不能为空")
return
}
if len(request.ChatroomId) == 0 {
err = errors.New("ChatroomId不能为空")
return
}
if HyTools.StringToInt(request.Hours) <= 0 || HyTools.StringToInt(request.Hours) > 999 {
err = errors.New("时长不合法")
return
}
//var hours decimal.Decimal
//hours, err = decimal.NewFromString(request.Hours)
//if err != nil {
// err = errors.New("时长不正确")
// return
//}
//if !isHalfMultiple(hours) {
// err = errors.New("时长必须为0.5的倍数")
// return
//}
return
}
// 派单请求
type DispatchOrderCommonRequest struct {
BaseRequest
GuildId string // 公会ID
ChatroomId string // 房间ID客服下单
HostUserId string // 派单用户ID客服下单
BuyerId string // 买家ID用户自己下单
SkillId string // 技能ID
Hours string // 时长
Comment string // 备注
NeedsAudition string // 是否试音 T=是 F=否
OrderList string
Orders []DispatchOrderCommonItemRequest
CompanionType string // 陪玩类型 single double
}
type DispatchOrderCommonItemRequest struct {
ConfigId string // 价格配置ID
Mode string //
Level string //
Service string //
Gender string //
Price string //
}
// 签名验证
func (request *DispatchOrderCommonRequest) CheckParameter() (err error) {
if len(request.AccessToken) == 0 {
err = errors.New("AccessToken不能为空")
return
}
if len(request.SkillId) == 0 {
err = errors.New("SkillId不能为空")
return
}
if e := json.Unmarshal([]byte(request.OrderList), &request.Orders); e != nil {
err = errors.New("数据格式错误")
return
}
if len(request.Orders) == 0 {
err = errors.New("至少要选择一个陪玩")
return
}
if HyTools.StringToInt(request.Hours) <= 0 || HyTools.StringToInt(request.Hours) > 999 {
err = errors.New("时长不合法")
return
}
//var hours decimal.Decimal
//hours, err = decimal.NewFromString(request.Hours)
//if err != nil {
// err = errors.New("时长不正确")
// return
//}
//if !isHalfMultiple(hours) {
// err = errors.New("时长必须为0.5的倍数")
// return
//}
for _, item := range request.Orders {
if len(item.Gender) > 0 && (HyTools.StringToInt(item.Price) <= 0 || HyTools.StringToInt(item.Price) > 99999) {
err = errors.New("价格不合法")
return
}
}
return
}