You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
469 lines
12 KiB
469 lines
12 KiB
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"` |
|
}
|
|
|