// 订单商品表,可以查订单内商品,可以根据商品查订单
type OrderGoods struct {BaseModelOrder int32 `gorm:"type:int;index"`Goods int32 `gorm:"type:int;index"`// 把商品的信息保存下来了,字段冗余,但能够减少服务之间的调用,高并发系统中的常见做法,而非遵循三范式// 还有一个作用是镜像,记录当时订单的商品价格,因为商品服务里的价格是变动的GoodsName string `gorm:"type:varchar(100);index"`GoodsImage string `gorm:"type:varchar(200)"`GoodsPrice float32Nums int32 `gorm:"type:int"`
}
_ = db.AutoMigrate(&model.ShoppingCart{}, &model.OrderInfo{}, &model.OrderGoods{})
service Order {//购物车rpc CartItemList(UserInfo) returns(CartItemListResponse); //获取用户的购物车信息rpc CreateCartItem(CartItemRequest) returns(ShopCartInfoResponse); //添加商品到购物车rpc UpdateCartItem(CartItemRequest) returns(google.protobuf.Empty); //修改购物车商品信息rpc DeleteCartItem(CartItemRequest) returns(google.protobuf.Empty); //删除购物车商品//订单rpc CreateOrder(OrderRequest) returns (OrderInfoResponse); //创建订单rpc OrderList(OrderFilterRequest) returns (OrderListResponse); // 订单列表rpc OrderDetail(OrderRequest) returns (OrderInfoDetailResponse); // 订单详情rpc UpdateOrderStatus(OrderStatus) returns (google.protobuf.Empty); // 修改订单状态
}
CreateOrder
接口,有一些要注意的地方CreateInBatches
var orderClient proto.OrderClient
var conn *grpc.ClientConnfunc TestCreateCartItem(userId, nums, goodsId int32){rsp, err := orderClient.CreateCartItem(context.Background(), &proto.CartItemRequest{UserId: userId,Nums: nums,GoodsId: goodsId,})if err != nil {panic(err)}fmt.Println(rsp.Id)
}func Init(){var err errorconn, err = grpc.Dial("127.0.0.1:50051", grpc.WithInsecure())if err != nil {panic(err)}orderClient = proto.NewOrderClient(conn)
}func main() {Init()// 启动两个依赖的微服务:商品和库存//TestCreateCartItem(1,1,422)//TestCartItemList(1)//TestUpdateCartItem(1)//TestCreateOrder()//TestGetOrderDetail(20)TestOrderList()conn.Close()
}
type AlipayConfig struct {AppID string `mapstructure:"app_id" json:"app_id"`PrivateKey string `mapstructure:"private_key" json:"private_key"`AliPublicKey string `mapstructure:"ali_public_key" json:"ali_public_key"`NotifyURL string `mapstructure:"notify_url" json:"notify_url"`ReturnURL string `mapstructure:"return_url" json:"return_url"`
}