fix:购物车下单

This commit is contained in:
momo 2023-09-19 19:17:04 +08:00
parent 12085dca8f
commit f4f5a62270
10 changed files with 150 additions and 30 deletions

View File

@ -1,10 +1,16 @@
package constants
// 订单类型
const (
DELIVERYMETHODDIRECTMAIL int64 = 1
DELIVERYMETHODDSCLOUDSTORE int64 = 1
)
// 货币
type Currency string
const (
Usd Currency = "usd"
CURRENCYUSD Currency = "usd"
)
// 金额单位
@ -17,17 +23,17 @@ type ExchangeRateUnit interface{}
type PayMethods string
const (
Card PayMethods = "CARD"
Visa PayMethods = "VISA"
PAYMETHODCARD PayMethods = "CARD"
PayMethodVISA PayMethods = "VISA"
)
// 支付状态
type PayStatusCode int64
const (
PayStatusUnpaid PayStatusCode = 10 //10,未支付
PayStatusPaid PayStatusCode = 20 //20,已支付
PayStatusRefunded PayStatusCode = 30 //30,已退款
PAYSTATUSUNPAID PayStatusCode = 10 //10,未支付
PAYSTATUSPAID PayStatusCode = 20 //20,已支付
PAYSTATUSREFUNDED PayStatusCode = 30 //30,已退款
)
// 订单支付状态
@ -39,11 +45,11 @@ type OrderPayStatusCode int64
// 30,已付尾款
// 40,已退尾款
const (
OrderPayStatusUnpaidDEPOSIT OrderPayStatusCode = 0
OrderPayStatusPaidDEPOSIT OrderPayStatusCode = 10
OrderPayStatusRefundedDEPOSIT OrderPayStatusCode = 20
OrderPayStatusPaidDREMAINING OrderPayStatusCode = 30
OrderPayStatusRefundedREMAINING OrderPayStatusCode = 40
ORDERPAYSTATUSUNPAIDDEPOSIT OrderPayStatusCode = 0
ORDERPAYSTATUSPAIDDEPOSIT OrderPayStatusCode = 10
ORDERPAYSTATUSREFUNDEDDEPOSIT OrderPayStatusCode = 20
ORDERPAYSTATUSPAIDDREMAINING OrderPayStatusCode = 30
ORDERPAYSTATUSREFUNDEDREMAINING OrderPayStatusCode = 40
)
// 订单状态
@ -76,9 +82,9 @@ var OrderStatusUser []OrderStatusCode
func init() {
// 订单状态名称
PayStatusMessage = make(map[PayStatusCode]string)
PayStatusMessage[PayStatusUnpaid] = "Paid"
PayStatusMessage[PayStatusPaid] = "Unpaid"
PayStatusMessage[PayStatusRefunded] = "Refunded"
PayStatusMessage[PAYSTATUSUNPAID] = "Paid"
PayStatusMessage[PAYSTATUSPAID] = "Unpaid"
PayStatusMessage[PAYSTATUSREFUNDED] = "Refunded"
// 订单状态名称
OrderStatusMessage = make(map[OrderStatusCode]string)

View File

@ -6,7 +6,7 @@ import (
// fs_cloud_storage 仓库的基本信息, 只做映射
type FsCloudStorage struct {
CloudStorageId *string `gorm:"unique_key;default:'';" json:"cloud_storage_id"` // 仓库id, 需要固定的命名规则, 能表达国外国内,区域等,简单明了
CloudStorageId *string `gorm:"unique_key;default:'';" json:"cloud_storage_id"` //
Name *string `gorm:"default:'';" json:"name"` // 仓库的名字, 中文使用拼音,国外使用英文
Address *string `gorm:"default:'';" json:"address"` // 仓库地址
Contact *[]byte `gorm:"default:'';" json:"contact"` //

View File

@ -0,0 +1,20 @@
package gmodel
import (
"gorm.io/gorm"
)
// fs_cloud_storage_stock
type FsCloudStorageStock struct {
StockId int64 `gorm:"primary_key;default:0;auto_increment;" json:"stock_id"` // 库存ID
OrderSn *string `gorm:"default:'';" json:"order_sn"` //
CloudStorageId *string `gorm:"default:'';" json:"cloud_storage_id"` //
}
type FsCloudStorageStockModel struct {
db *gorm.DB
name string
}
func NewFsCloudStorageStockModel(db *gorm.DB) *FsCloudStorageStockModel {
return &FsCloudStorageStockModel{db: db, name: "fs_cloud_storage_stock"}
}

View File

@ -0,0 +1,2 @@
package gmodel
// TODO: 使用model的属性做你想做的

View File

@ -1,9 +1,8 @@
package gmodel
import (
"time"
"gorm.io/gorm"
"time"
)
// fs_order 订单表
@ -11,13 +10,14 @@ type FsOrder struct {
Id int64 `gorm:"primary_key;default:0;auto_increment;" json:"id"` // 订单ID
UserId *int64 `gorm:"index;default:0;" json:"user_id"` // 用户ID
DeliveryMethod *int64 `gorm:"index;default:0;" json:"delivery_method"` // 物流类型
OrderSn *string `gorm:"index;default:'';" json:"order_sn"` //
OrderSn *string `gorm:"unique_key;default:'';" json:"order_sn"` //
OrderSource *string `gorm:"default:'';" json:"order_source"` //
Status *int64 `gorm:"index;default:0;" json:"status"` // 订单状态
Metadata *[]byte `gorm:"default:'';" json:"metadata"` //
Ctime *time.Time `gorm:"default:'0000-00-00 00:00:00';" json:"ctime"` //
Utime *time.Time `gorm:"default:'0000-00-00 00:00:00';" json:"utime"` //
IsDel *int64 `gorm:"default:0;" json:"is_del"` // 是否删除0=否1=是
PayStatus *int64 `gorm:"default:0;" json:"pay_status"` // 支付状态
}
type FsOrderModel struct {
db *gorm.DB

View File

@ -14,6 +14,7 @@ type NewFsOrder struct {
OrderSn *string `gorm:"index;default:'';" json:"order_sn"` //
OrderSource *string `gorm:"default:'';" json:"order_source"` //
Status *int64 `gorm:"index;default:0;" json:"status"` // 订单状态
PayStatus *int64 `gorm:"default:0;" json:"pay_status"` // 支付状态
Metadata *OrderDetail `gorm:"metadata,type:json" json:"metadata"` //
Ctime *time.Time `gorm:"default:'0000-00-00 00:00:00';" json:"ctime"` //
Utime *time.Time `gorm:"default:'0000-00-00 00:00:00';" json:"utime"` //

View File

@ -9,15 +9,15 @@ import (
type FsOrderTrade struct {
Id int64 `gorm:"primary_key;default:0;auto_increment;" json:"id"` // 订单交易ID
UserId *int64 `gorm:"index;default:0;" json:"user_id"` // 用户ID
OrderNo *string `gorm:"default:'';" json:"order_no"` //
OrderSn *string `gorm:"default:'';" json:"order_sn"` //
OrderSource *string `gorm:"default:'';" json:"order_source"` //
TradeNo *string `gorm:"index;default:'';" json:"trade_no"` //
TradeSn *string `gorm:"index;default:'';" json:"trade_sn"` //
PayAmount *int64 `gorm:"default:0;" json:"pay_amount"` // 支付金额 (分)
PayStatus *int64 `gorm:"default:0;" json:"pay_status"` // 支付状态1=未成功2=已成功
PaymentMethod *int64 `gorm:"default:0;" json:"payment_method"` // 支付方式1=stripe2=paypal
PayStage *int64 `gorm:"default:0;" json:"pay_stage"` // 支付阶段1=首付2=尾款
RefundStatus *int64 `gorm:"default:0;" json:"refund_status"` // 退款状态1=未退款2=已退款
CardNo *string `gorm:"default:'';" json:"card_no"` //
CardSn *string `gorm:"default:'';" json:"card_sn"` //
CardBrand *string `gorm:"default:'';" json:"card_brand"` //
Country *string `gorm:"default:'';" json:"country"` //
Currency *string `gorm:"default:'';" json:"currency"` //

View File

@ -31,6 +31,7 @@ type AllModelsGen struct {
FsCloudReceiveOld *FsCloudReceiveOldModel // fs_cloud_receive_old 云仓接收工厂总单
FsCloudRenderLogOld *FsCloudRenderLogOldModel // fs_cloud_render_log_old 云渲染日志表
FsCloudStorage *FsCloudStorageModel // fs_cloud_storage 仓库的基本信息, 只做映射
FsCloudStorageStock *FsCloudStorageStockModel // fs_cloud_storage_stock
FsCloudUserApplyBackOld *FsCloudUserApplyBackOldModel // fs_cloud_user_apply_back_old 该表废弃
FsContact *FsContactModel // fs_contact 该表暂未使用
FsContactService *FsContactServiceModel // fs_contact_service
@ -141,6 +142,7 @@ func NewAllModels(gdb *gorm.DB) *AllModelsGen {
FsCloudReceiveOld: NewFsCloudReceiveOldModel(gdb),
FsCloudRenderLogOld: NewFsCloudRenderLogOldModel(gdb),
FsCloudStorage: NewFsCloudStorageModel(gdb),
FsCloudStorageStock: NewFsCloudStorageStockModel(gdb),
FsCloudUserApplyBackOld: NewFsCloudUserApplyBackOldModel(gdb),
FsContact: NewFsContactModel(gdb),
FsContactService: NewFsContactServiceModel(gdb),

View File

@ -5,12 +5,14 @@ import (
"encoding/json"
"errors"
"fmt"
"fusenapi/constants"
"fusenapi/model/gmodel"
"fusenapi/utils/basic"
"fusenapi/utils/order"
"fusenapi/utils/shopping_cart"
"fusenapi/utils/step_price"
"math"
"time"
"github.com/aws/aws-sdk-go/aws/session"
"gorm.io/gorm"
@ -33,15 +35,22 @@ type (
// 详情
}
OrderAddress struct {
Address string `json:"address"` // 详细地址
Mobile string `json:"mobile"` // 手机
Name string `json:"name"` // 姓名
}
/* 下单 */
CreateReq struct {
ExpectedDeliveryTime string `json:"expected_delivery_time"` // 预计到货时间
ExchangeRate int64 `json:"exchange_rate"` // 换算汇率(厘)
CurrentCurrency string `json:"current_currency"` // 当前货币
OriginalCurrency string `json:"original_currency"` // 原始货币
UserId int64 `json:"user_id"`
CartIds []int64 `json:"cart_ids"`
DeliveryMethod string `json:"delivery_method"`
ExpectedDeliveryTime string `json:"expected_delivery_time"` // 预计到货时间
ExchangeRate int64 `json:"exchange_rate"` // 换算汇率(厘)
CurrentCurrency string `json:"current_currency"` // 当前货币
OriginalCurrency string `json:"original_currency"` // 原始货币
UserId int64 `json:"user_id"`
CartIds []int64 `json:"cart_ids"`
DeliveryMethod int64 `json:"delivery_method"`
DeliveryAddress *OrderAddress `json:"delivery_address"` // 收货地址
}
CreateRes struct {
ErrorCode basic.StatusResponse
@ -99,7 +108,21 @@ func (d *defaultOrder) Create(ctx context.Context, in *CreateReq) (res *CreateRe
// 订单总价(厘)
var orderTotal int64
var payStatus int64
var nowTime = time.Now().UTC()
// 收货地址
var orderAddress *gmodel.OrderAddress
// 支付状态
var payStatus = constants.ORDERPAYSTATUSUNPAIDDEPOSIT
// 直邮
if in.DeliveryMethod == constants.DELIVERYMETHODDIRECTMAIL {
orderAddress = &gmodel.OrderAddress{
Mobile: in.DeliveryAddress.Mobile,
Name: in.DeliveryAddress.Name,
}
}
for _, shoppingCart := range shoppingCartList {
// 购物车快照
@ -248,8 +271,24 @@ func (d *defaultOrder) Create(ctx context.Context, in *CreateReq) (res *CreateRe
CurrentCurrency: in.CurrentCurrency,
OriginalCurrency: in.OriginalCurrency,
})
fmt.Println(orderProductList, shippingFee, shippingFeeTotal, tax, taxTotal, discount, discountTotal, subtotal, orderProductTotal, total)
// 定金
var depositInt int64 //厘
var deposit = gmodel.PayInfo{
Status: gmodel.PayStatus{
StatusCode: int64(constants.PAYSTATUSUNPAID),
StatusTitle: constants.PayStatusMessage[constants.PAYSTATUSUNPAID],
},
PayAmount: gmodel.AmountInfo{},
}
// 尾款
var remainingBalanceInt int64 //厘
var remainingBalance = gmodel.PayInfo{}
fmt.Println(orderProductList, shippingFee, shippingFeeTotal, tax, taxTotal, discount, discountTotal, subtotal, orderProductTotal, total)
var orderAmount = gmodel.OrderAmount{
Deposit: deposit,
RemainingBalance: remainingBalance,
}
return nil
})
if err != nil {

View File

@ -1,7 +1,12 @@
package order
import (
"fmt"
"fusenapi/constants"
"fusenapi/model/gmodel"
"math/rand"
"strconv"
"time"
)
type AmountCurrencyReq struct {
@ -75,3 +80,48 @@ func GetAmountInfo(req GetAmountInfoReq) gmodel.AmountInfo {
Metadata: req.Metadata,
}
}
func GenerateOrderNumber(userID int) string {
// 获取当前时间
now := time.Now()
// 生成年月日时分秒的字符串
year := strconv.Itoa(now.Year())
month := strconv.Itoa(int(now.Month()))
day := strconv.Itoa(now.Day())
hour := strconv.Itoa(now.Hour())
minute := strconv.Itoa(now.Minute())
second := strconv.Itoa(now.Second())
// 生成2位随机数
rand.Seed(time.Now().UnixNano())
randomNum := fmt.Sprintf("%02d", rand.Intn(100))
// 拼接订单号
orderNumber := year + month + day + hour + minute + second + randomNum + strconv.Itoa(userID)
return orderNumber
}
// 初始化订单状态
func GenerateOrderStatusLink(req []gmodel.OrderStatus) []gmodel.OrderStatus {
var list []gmodel.OrderStatus
for _, v := range constants.OrderStatusUser {
for _, v1 := range req {
if v1.StatusCode == v {
list = append(list, v1)
} else {
list = append(list, gmodel.OrderStatus{
StatusCode: v,
StatusTitle: constants.OrderStatusMessage[v],
})
}
}
}
return list
}
// 获取订单当前状态
func GenerateOrderStatusCurrent() gmodel.OrderStatus {
return gmodel.OrderStatus{}
}