470 lines
12 KiB
Go
470 lines
12 KiB
Go
package model
|
|
|
|
import (
|
|
"encoding/json"
|
|
|
|
"go-common/app/common/openplatform/encoding"
|
|
"go-common/app/service/openplatform/ticket-sales/api/grpc/type"
|
|
"go-common/app/service/openplatform/ticket-sales/api/grpc/v1"
|
|
"go-common/library/time"
|
|
|
|
"github.com/gogo/protobuf/types"
|
|
)
|
|
|
|
//OrderMain 订单主表结构
|
|
type OrderMain struct {
|
|
OrderID int64 `json:"order_id"`
|
|
UID string `json:"uid"`
|
|
OrderType int16 `json:"order_type"`
|
|
ItemID int64 `json:"item_id"`
|
|
ItemInfo *_type.OrderItemInfo `json:"item_info"`
|
|
Count int64 `json:"count"`
|
|
TotalMoney int64 `json:"total_money"`
|
|
PayMoney int64 `json:"pay_money"`
|
|
ExpressFee int64 `json:"express_fee"`
|
|
PayChannel int16 `json:"pay_channel"`
|
|
PayTime int64 `json:"pay_time"`
|
|
Source string `json:"source"`
|
|
Status int16 `json:"status"`
|
|
SubStatus int16 `json:"sub_status"`
|
|
RefundStatus int16 `json:"refund_status"`
|
|
IsDeleted int16 `json:"is_deleted"`
|
|
CTime time.Time `json:"ctime"`
|
|
MTime time.Time `json:"mtime"`
|
|
}
|
|
|
|
//OrderMainQuerier 订单表查询参数
|
|
type OrderMainQuerier v1.ListOrdersRequest
|
|
|
|
// OrderDetail 订单详情表信息
|
|
type OrderDetail struct {
|
|
OrderID int64 `json:"order_id"`
|
|
Buyer string `json:"buyer"`
|
|
Tel string `json:"tel"`
|
|
PersonalID string `json:"personal_id"`
|
|
ExpressCO string `json:"express_co"`
|
|
ExpressNO string `json:"express_no"`
|
|
ExpressType int16 `json:"express_type"`
|
|
Remark string `json:"remark"`
|
|
DeviceType int16 `json:"device_type"`
|
|
IP []byte `json:"ip"`
|
|
Coupon *_type.OrderCoupon `json:"coupon"`
|
|
DeliverDetail *_type.OrderDeliver `json:"deliver_detail"`
|
|
Detail *_type.OrderExtra `json:"detail"`
|
|
MSource string `json:"msource"`
|
|
CTime time.Time `json:"-"`
|
|
MTime time.Time `json:"-"`
|
|
}
|
|
|
|
//OrderSKU order_sku表结构
|
|
type OrderSKU _type.OrderSKU
|
|
|
|
//OrderPayCharge 订单支付表结构
|
|
type OrderPayCharge _type.OrderPayCharge
|
|
|
|
//GetFields 获取order_main表所有字段,参数是需要排除的字段
|
|
func (o *OrderMain) GetFields(except *types.FieldMask) []string {
|
|
fields := []string{
|
|
"order_id", "uid", "order_type", "item_id", "item_info",
|
|
"count", "total_money", "express_fee", "pay_money", "pay_channel",
|
|
"pay_time", "source", "status", "sub_status", "refund_status",
|
|
"is_deleted", "ctime", "mtime",
|
|
}
|
|
if except != nil {
|
|
lp := len(except.Paths)
|
|
mExcept := make(map[string]bool, lp)
|
|
for _, v := range except.Paths {
|
|
mExcept[v] = true
|
|
}
|
|
res := make([]string, len(fields)-lp)
|
|
i := 0
|
|
for _, v := range fields {
|
|
if ok := mExcept[v]; !ok {
|
|
res[i] = v
|
|
i++
|
|
}
|
|
}
|
|
return res
|
|
}
|
|
return fields
|
|
}
|
|
|
|
//GetFields 获取order_detail字段名称
|
|
func (o *OrderDetail) GetFields(except *types.FieldMask) []string {
|
|
fields := []string{
|
|
"order_id", "buyer", "tel", "personal_id", "express_co",
|
|
"express_no", "express_type", "remark", "device_type", "ip",
|
|
"coupon", "deliver_detail", "detail", "msource", "ctime",
|
|
"mtime",
|
|
}
|
|
if except != nil {
|
|
lp := len(except.Paths)
|
|
mExcept := make(map[string]bool, lp)
|
|
for _, v := range except.Paths {
|
|
mExcept[v] = true
|
|
}
|
|
res := make([]string, len(fields)-lp)
|
|
i := 0
|
|
for _, v := range fields {
|
|
if ok := mExcept[v]; !ok {
|
|
res[i] = v
|
|
i++
|
|
}
|
|
}
|
|
return res
|
|
}
|
|
return fields
|
|
}
|
|
|
|
//GetFields 获取order_sku对象的字段名
|
|
func (o *OrderSKU) GetFields(except *types.FieldMask) []string {
|
|
fields := []string{
|
|
"order_id", "sku_id", "count", "origin_price", "price",
|
|
"seat_ids", "ticket_type", "discounts", "ctime", "mtime",
|
|
}
|
|
if except != nil {
|
|
lp := len(except.Paths)
|
|
mExcept := make(map[string]bool, lp)
|
|
for _, v := range except.Paths {
|
|
mExcept[v] = true
|
|
}
|
|
res := make([]string, len(fields)-lp)
|
|
i := 0
|
|
for _, v := range fields {
|
|
if ok := mExcept[v]; !ok {
|
|
res[i] = v
|
|
i++
|
|
}
|
|
}
|
|
return res
|
|
}
|
|
return fields
|
|
}
|
|
|
|
//GetFields 获取order_pay_charge对象的字段名
|
|
func (o *OrderPayCharge) GetFields(except *types.FieldMask) []string {
|
|
fields := []string{
|
|
"order_id", "charge_id", "channel", "paid", "refunded",
|
|
"ctime", "mtime",
|
|
}
|
|
if except != nil {
|
|
lp := len(except.Paths)
|
|
mExcept := make(map[string]bool, lp)
|
|
for _, v := range except.Paths {
|
|
mExcept[v] = true
|
|
}
|
|
res := make([]string, len(fields)-lp)
|
|
i := 0
|
|
for _, v := range fields {
|
|
if ok := mExcept[v]; !ok {
|
|
res[i] = v
|
|
i++
|
|
}
|
|
}
|
|
return res
|
|
}
|
|
return fields
|
|
}
|
|
|
|
//GetPtrs 获取order_main对象指针
|
|
// 如果设置vptr参数,会把struct指针替换成string指针,并在vptr保存原struct指针(as value)和它在返回数组中的下标(as key)
|
|
func (o *OrderMain) GetPtrs(fields *types.FieldMask, vptr map[int]interface{}) []interface{} {
|
|
ptrs := map[string]interface{}{
|
|
"order_id": &o.OrderID,
|
|
"uid": &o.UID,
|
|
"order_type": &o.OrderType,
|
|
"item_id": &o.ItemID,
|
|
"item_info": &o.ItemInfo,
|
|
"count": &o.Count,
|
|
"total_money": &o.TotalMoney,
|
|
"express_fee": &o.ExpressFee,
|
|
"pay_money": &o.PayMoney,
|
|
"pay_channel": &o.PayChannel,
|
|
"pay_time": &o.PayTime,
|
|
"source": &o.Source,
|
|
"status": &o.Status,
|
|
"sub_status": &o.SubStatus,
|
|
"refund_status": &o.RefundStatus,
|
|
"is_deleted": &o.IsDeleted,
|
|
"ctime": &o.CTime,
|
|
"mtime": &o.MTime,
|
|
}
|
|
if fields == nil {
|
|
fields = &types.FieldMask{Paths: o.GetFields(nil)}
|
|
}
|
|
ret := make([]interface{}, len(fields.Paths))
|
|
i := 0
|
|
for _, f := range fields.Paths {
|
|
if vptr != nil && f == "item_info" {
|
|
var s string
|
|
ret[i] = &s
|
|
vptr[i] = ptrs[f]
|
|
} else {
|
|
ret[i] = ptrs[f]
|
|
}
|
|
i++
|
|
}
|
|
return ret
|
|
}
|
|
|
|
//GetPtrs 获取order_detail对象指针
|
|
func (o *OrderDetail) GetPtrs(fields *types.FieldMask, vptr map[int]interface{}) []interface{} {
|
|
ptrs := map[string]interface{}{
|
|
"order_id": &o.OrderID,
|
|
"buyer": &o.Buyer,
|
|
"tel": &o.Tel,
|
|
"personal_id": &o.PersonalID,
|
|
"express_co": &o.ExpressCO,
|
|
"express_no": &o.ExpressNO,
|
|
"express_type": &o.ExpressType,
|
|
"remark": &o.Remark,
|
|
"device_type": &o.DeviceType,
|
|
"ip": &o.IP,
|
|
"coupon": &o.Coupon,
|
|
"deliver_detail": &o.DeliverDetail,
|
|
"detail": &o.Detail,
|
|
"msource": &o.MSource,
|
|
"ctime": &o.CTime,
|
|
"mtime": &o.MTime,
|
|
}
|
|
if fields == nil {
|
|
fields = &types.FieldMask{Paths: o.GetFields(nil)}
|
|
}
|
|
ret := make([]interface{}, len(fields.Paths))
|
|
i := 0
|
|
for _, f := range fields.Paths {
|
|
if vptr != nil && (f == "coupon" || f == "deliver_detail" || f == "detail") {
|
|
var s string
|
|
ret[i] = &s
|
|
vptr[i] = ptrs[f]
|
|
} else {
|
|
ret[i] = ptrs[f]
|
|
}
|
|
i++
|
|
}
|
|
return ret
|
|
}
|
|
|
|
//GetPtrs 获取order_sku对象的字段指针
|
|
func (o *OrderSKU) GetPtrs(fields *types.FieldMask, vptr map[int]interface{}) []interface{} {
|
|
ptrs := map[string]interface{}{
|
|
"order_id": &o.OrderID,
|
|
"sku_id": &o.SKUID,
|
|
"count": &o.Count,
|
|
"origin_price": &o.OriginPrice,
|
|
"price": &o.Price,
|
|
"seat_ids": &o.SeatIDs,
|
|
"ticket_type": &o.TicketType,
|
|
"discounts": &o.Discounts,
|
|
"ctime": &o.CTime,
|
|
"mtime": &o.MTime,
|
|
}
|
|
if fields == nil {
|
|
fields = &types.FieldMask{Paths: o.GetFields(nil)}
|
|
}
|
|
ret := make([]interface{}, len(fields.Paths))
|
|
i := 0
|
|
for _, f := range fields.Paths {
|
|
if vptr != nil && (f == "discounts" || f == "seat_ids") {
|
|
var s string
|
|
ret[i] = &s
|
|
vptr[i] = ptrs[f]
|
|
} else {
|
|
ret[i] = ptrs[f]
|
|
}
|
|
i++
|
|
}
|
|
return ret
|
|
}
|
|
|
|
//GetPtrs 获取order_pay_charge对象的字段指针
|
|
func (o *OrderPayCharge) GetPtrs(fields *types.FieldMask, vptr map[int]interface{}) []interface{} {
|
|
ptrs := map[string]interface{}{
|
|
"order_id": &o.OrderID,
|
|
"charge_id": &o.ChargeID,
|
|
"channel": &o.Channel,
|
|
"paid": &o.Paid,
|
|
"refunded": &o.Refunded,
|
|
"ctime": &o.CTime,
|
|
"mtime": &o.MTime,
|
|
}
|
|
if fields == nil {
|
|
fields = &types.FieldMask{Paths: o.GetFields(nil)}
|
|
}
|
|
ret := make([]interface{}, len(fields.Paths))
|
|
i := 0
|
|
for _, f := range fields.Paths {
|
|
if vptr != nil && f == "discounts" {
|
|
var s string
|
|
ret[i] = &s
|
|
vptr[i] = ptrs[f]
|
|
} else {
|
|
ret[i] = ptrs[f]
|
|
}
|
|
i++
|
|
}
|
|
return ret
|
|
}
|
|
|
|
//GetVals 获取order_main对象里的值
|
|
func (o *OrderMain) GetVals(fields *types.FieldMask, asString bool) []interface{} {
|
|
vals := map[string]interface{}{
|
|
"order_id": o.OrderID,
|
|
"uid": o.UID,
|
|
"order_type": o.OrderType,
|
|
"item_id": o.ItemID,
|
|
"item_info": o.ItemInfo,
|
|
"count": o.Count,
|
|
"total_money": o.TotalMoney,
|
|
"express_fee": o.ExpressFee,
|
|
"pay_money": o.PayMoney,
|
|
"pay_channel": o.PayChannel,
|
|
"pay_time": o.PayTime,
|
|
"source": o.Source,
|
|
"status": o.Status,
|
|
"sub_status": o.SubStatus,
|
|
"refund_status": o.RefundStatus,
|
|
"is_deleted": o.IsDeleted,
|
|
"ctime": o.CTime,
|
|
"mtime": o.MTime,
|
|
}
|
|
if fields == nil {
|
|
fields = &types.FieldMask{Paths: o.GetFields(nil)}
|
|
}
|
|
ret := make([]interface{}, len(fields.Paths))
|
|
i := 0
|
|
for _, f := range fields.Paths {
|
|
if asString && f == "item_info" {
|
|
if b, err := json.Marshal(vals[f]); err == nil {
|
|
ret[i] = string(b)
|
|
}
|
|
} else {
|
|
ret[i] = vals[f]
|
|
}
|
|
i++
|
|
}
|
|
return ret
|
|
}
|
|
|
|
//GetVals 获取order_detail对象字段的值
|
|
func (o *OrderDetail) GetVals(fields *types.FieldMask, asString bool) []interface{} {
|
|
vals := map[string]interface{}{
|
|
"order_id": o.OrderID,
|
|
"buyer": o.Buyer,
|
|
"tel": o.Tel,
|
|
"personal_id": o.PersonalID,
|
|
"express_co": o.ExpressCO,
|
|
"express_no": o.ExpressNO,
|
|
"express_type": o.ExpressType,
|
|
"remark": o.Remark,
|
|
"device_type": o.DeviceType,
|
|
"ip": o.IP,
|
|
"coupon": o.Coupon,
|
|
"deliver_detail": o.DeliverDetail,
|
|
"detail": o.Detail,
|
|
"msource": o.MSource,
|
|
"ctime": o.CTime,
|
|
"mtime": o.MTime,
|
|
}
|
|
if fields == nil {
|
|
fields = &types.FieldMask{Paths: o.GetFields(nil)}
|
|
}
|
|
ret := make([]interface{}, len(fields.Paths))
|
|
i := 0
|
|
for _, f := range fields.Paths {
|
|
if asString && (f == "coupon" || f == "deliver_detail" || f == "detail") {
|
|
if b, err := json.Marshal(vals[f]); err == nil {
|
|
ret[i] = string(b)
|
|
}
|
|
} else {
|
|
ret[i] = vals[f]
|
|
}
|
|
i++
|
|
}
|
|
return ret
|
|
}
|
|
|
|
//GetVals 获取order_sku字段的值
|
|
func (o *OrderSKU) GetVals(fields *types.FieldMask, asString bool) []interface{} {
|
|
vals := map[string]interface{}{
|
|
"order_id": o.OrderID,
|
|
"sku_id": o.SKUID,
|
|
"count": o.Count,
|
|
"origin_price": o.OriginPrice,
|
|
"price": o.Price,
|
|
"seat_ids": o.SeatIDs,
|
|
"ticket_type": o.TicketType,
|
|
"discounts": o.Discounts,
|
|
"ctime": o.CTime,
|
|
"mtime": o.MTime,
|
|
}
|
|
if fields == nil {
|
|
fields = &types.FieldMask{Paths: o.GetFields(nil)}
|
|
}
|
|
ret := make([]interface{}, len(fields.Paths))
|
|
i := 0
|
|
for _, f := range fields.Paths {
|
|
if asString && (f == "discounts" || f == "seat_ids") {
|
|
if b, err := json.Marshal(vals[f]); err == nil {
|
|
ret[i] = string(b)
|
|
}
|
|
} else {
|
|
ret[i] = vals[f]
|
|
}
|
|
i++
|
|
}
|
|
return ret
|
|
}
|
|
|
|
func (o *OrderDetail) getEncryptPtrs() []*string {
|
|
res := make([]*string, 3)
|
|
res[0] = &o.Tel
|
|
res[1] = &o.PersonalID
|
|
if o.DeliverDetail != nil {
|
|
res[2] = &o.DeliverDetail.Tel
|
|
}
|
|
return res
|
|
}
|
|
|
|
//Encrypt 加密order_detail的字段
|
|
func (o *OrderDetail) Encrypt(c *encoding.EncryptConfig) {
|
|
for _, p := range o.getEncryptPtrs() {
|
|
if p != nil {
|
|
s, _ := encoding.Encrypt(*p, c)
|
|
*p = s
|
|
}
|
|
}
|
|
}
|
|
|
|
//Decrypt 解密order_detail字段
|
|
func (o *OrderDetail) Decrypt(c *encoding.EncryptConfig) {
|
|
for _, p := range o.getEncryptPtrs() {
|
|
if p != nil {
|
|
s, _ := encoding.Decrypt(*p, c)
|
|
*p = s
|
|
}
|
|
}
|
|
}
|
|
|
|
//GetSettleOrdersRequest 获取结算订单请求
|
|
type GetSettleOrdersRequest struct {
|
|
Date string `form:"date" validate:"required"`
|
|
Ref byte `form:"ref"`
|
|
ExtParams string `form:"extParams" validate:"omitempty,numeric"`
|
|
PageSize int `form:"pagesize"`
|
|
}
|
|
|
|
//SettleOrder 获取结算订单返回
|
|
type SettleOrder struct {
|
|
ID int64 `json:"-"`
|
|
OrderID int64 `json:"order_id"`
|
|
RefID int64 `json:"ref_id"`
|
|
RefundApplyTime time.Time `json:"-"`
|
|
}
|
|
|
|
//SettleOrders 获取结算订单返回
|
|
type SettleOrders struct {
|
|
Data []*SettleOrder `json:"data"`
|
|
ExtParams string `json:"extParams"`
|
|
}
|