package order import ( "fmt" "fusenapi/constants" "fusenapi/model/gmodel" "fusenapi/utils/format" "strconv" "time" ) type AmountCurrencyReq struct { ExchangeRate int64 `json:"exchange_rate"` // 换算汇率 CurrentAmount int64 `json:"current_amount"` // 当前金额 OriginalAmount int64 `json:"original_amount"` // 原始金额 CurrentCurrency string `json:"current_currency"` // 当前货币 OriginalCurrency string `json:"original_currency"` // 原始货币 } // 汇率换算 func GetAmountCurrency(req *AmountCurrencyReq) gmodel.AmountCurrency { if req.CurrentAmount != 0 { if req.CurrentCurrency == req.OriginalCurrency { req.CurrentAmount = req.OriginalAmount } else { req.CurrentAmount = req.OriginalAmount * req.ExchangeRate } } return gmodel.AmountCurrency{ ExchangeRate: req.ExchangeRate, CurrentAmount: req.CurrentAmount, OriginalAmount: req.OriginalAmount, CurrentCurrency: req.CurrentCurrency, OriginalCurrency: req.OriginalCurrency, } } type GetAmountInfoReq struct { ExchangeRate int64 Initiate int64 Current int64 Change int64 ChangeRemark string Metadata map[string]interface{} CurrentCurrency string OriginalCurrency string } // Change AmountCurrency `json:"change,omitempty"` // 变动金额 // ChangeRemark string `json:"change_remark,omitempty"` // 变动备注 // Current AmountCurrency `json:"current"` // 当前金额 // Initiate AmountCurrency `json:"initiate"` // 初始金额 // Metadata map[string]interface{} `json:"metadata"` // 额外明细 func GetAmountInfo(req GetAmountInfoReq) gmodel.AmountInfo { return gmodel.AmountInfo{ Change: GetAmountCurrency(&AmountCurrencyReq{ ExchangeRate: req.ExchangeRate, CurrentAmount: req.Change, OriginalAmount: req.Change, CurrentCurrency: req.OriginalCurrency, OriginalCurrency: req.OriginalCurrency, }), ChangeRemark: req.ChangeRemark, Current: GetAmountCurrency(&AmountCurrencyReq{ ExchangeRate: req.ExchangeRate, CurrentAmount: req.Current, OriginalAmount: req.Current, CurrentCurrency: req.OriginalCurrency, OriginalCurrency: req.OriginalCurrency, }), Initiate: GetAmountCurrency(&AmountCurrencyReq{ ExchangeRate: req.ExchangeRate, CurrentAmount: req.Initiate, OriginalAmount: req.Initiate, CurrentCurrency: req.OriginalCurrency, OriginalCurrency: req.OriginalCurrency, }), Metadata: req.Metadata, } } type GetAmountCurrencyUSDReq struct { ExchangeRate int64 `json:"exchange_rate"` // 换算汇率 CurrentAmount int64 `json:"current_amount"` // 当前金额 OriginalAmount int64 `json:"original_amount"` // 原始金额 CurrentCurrency string `json:"current_currency"` // 当前货币 OriginalCurrency string `json:"original_currency"` // 原始货币 } // 处理金额(元) func GetAmountCurrencyFormat(req *gmodel.AmountCurrency) (res gmodel.AmountCurrency) { return gmodel.AmountCurrency{ ExchangeRate: format.CentitoDollarStr(req.ExchangeRate.(float64)), CurrentAmount: format.CentitoDollarStr(req.CurrentAmount.(float64)), OriginalAmount: format.CentitoDollarStr(req.OriginalAmount.(float64)), CurrentCurrency: req.CurrentCurrency, OriginalCurrency: req.OriginalCurrency, } } // 处理金额(元) func GetAmountInfoFormat(req *gmodel.AmountInfo) gmodel.AmountInfo { Current := GetAmountCurrencyFormat(&req.Current) fmt.Println(Current) return gmodel.AmountInfo{ Change: GetAmountCurrencyFormat(&req.Change), ChangeRemark: req.ChangeRemark, Current: GetAmountCurrencyFormat(&req.Current), Initiate: GetAmountCurrencyFormat(&req.Initiate), Metadata: req.Metadata, } } // 处理商品数量 func GetPurchaseQuantity(req *gmodel.PurchaseQuantity) gmodel.PurchaseQuantity { return gmodel.PurchaseQuantity{ Initiate: strconv.FormatInt(int64(req.Initiate.(float64)), 10), Current: strconv.FormatInt(int64(req.Current.(float64)), 10), } } // 生成订单编号 func GenerateOrderNumber() string { t := time.Now() orderNumber := fmt.Sprintf("%d%02d%02d%08d", t.Year(), t.Month(), t.Day(), t.UnixNano()%100000000) fmt.Println(orderNumber) return orderNumber } // 初始化订单状态--链路 func GenerateOrderStatusLink(deliveryMethod int64, noTime time.Time, expectedTime time.Time) []gmodel.OrderStatus { var list []gmodel.OrderStatus var orderStatus []constants.OrderStatusCode if deliveryMethod == constants.DELIVERYMETHODDIRECTMAIL { orderStatus = constants.OrderStatusUserDIRECTMAIL } else { orderStatus = constants.OrderStatusUserCLOUDSTORE } for _, v := range orderStatus { item := gmodel.OrderStatus{ StatusCode: v, StatusTitle: constants.OrderStatusMessage[v], } if v == constants.ORDER_STATUS_UNPAIDDEPOSIT { item.Ctime = &noTime item.Utime = &noTime } if v == constants.ORDER_STATUS_DIRECTMAIL_ARRIVED || v == constants.ORDER_STATUS_CLOUDSTORE_ARRIVEDWAREHOUSE { item.ExpectedTime = &expectedTime } list = append(list, item) } return list } // 更新订单状态--链路 func UpdateOrderStatusLink(statusLink []gmodel.OrderStatus, status gmodel.OrderStatus) []gmodel.OrderStatus { var list []gmodel.OrderStatus for _, v := range statusLink { if v.StatusCode == status.StatusCode { item := v if status.StatusTitle != "" { item.StatusTitle = status.StatusTitle } if status.StatusCode != 0 { item.StatusCode = status.StatusCode } if status.Utime != nil { item.Utime = status.Utime } if status.Ctime != nil { item.Ctime = status.Ctime } if status.Metadata != nil { item.Metadata = status.Metadata } if status.ExpectedTime != nil { item.ExpectedTime = status.ExpectedTime } if status.Children != nil || len(status.Children) > 0 { item.Children = status.Children } list = append(list, item) } else { list = append(list, v) } } return list } // 获取订单状态 func GetOrderStatusLinkUser(deliveryMethod int64, statusLink []gmodel.OrderStatus) []gmodel.OrderStatus { var list []gmodel.OrderStatus var orderStatus []constants.OrderStatusCode if deliveryMethod == constants.DELIVERYMETHODDIRECTMAIL { orderStatus = constants.OrderStatusUserDIRECTMAIL } else { orderStatus = constants.OrderStatusUserCLOUDSTORE } for _, v := range statusLink { for _, orderStatusCode := range orderStatus { if v.StatusCode == orderStatusCode { list = append(list, v) } } } return list } // 获取订单当前状态 func GetOrderStatusCurrent(statusLink []gmodel.OrderStatus, orderStatusCode constants.OrderStatusCode) gmodel.OrderStatus { var status gmodel.OrderStatus for _, v := range statusLink { if v.StatusCode == orderStatusCode { status = v } } return status }