fusenapi/model/gmodel/fs_shopping_cart_logic.go
laodaming b868ef19ae fix
2023-11-01 17:10:53 +08:00

175 lines
7.4 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package gmodel
import (
"context"
"time"
)
func (m *FsShoppingCartModel) TableName() string {
return m.name
}
// 关联查询
type RelaFsShoppingCart struct {
FsShoppingCart
ShoppingCartProduct *RelaFsProduct `json:"shopping_cart_product" gorm:"foreignkey:product_id;references:id"`
ShoppingCartProductModel3d *FsProductModel3d `json:"shopping_cart_product_model3d_list" gorm:"foreignkey:model_id;references:id"`
ShoppingCartProductModel3dFitting *FsProductModel3d `json:"shopping_cart_product_model3d_list_fitting" gorm:"foreignkey:fitting_id;references:id"`
}
type FsShoppingCartData struct {
Id int64 `gorm:"primary_key;default:0;auto_increment;" json:"id"` // id
UserId *int64 `gorm:"default:0;" json:"user_id"` // 用户id
ProductId *int64 `gorm:"default:0;" json:"product_id"` // 产品id
TemplateId *int64 `gorm:"default:0;" json:"template_id"` // 模板id
ModelId *int64 `gorm:"default:0;" json:"model_id"` // 模型id
SizeId *int64 `gorm:"default:0;" json:"size_id"` // 尺寸id
LightId *int64 `gorm:"default:0;" json:"light_id"` // 灯光id
FittingId *int64 `gorm:"default:0;" json:"fitting_id"` // 配件id
PurchaseQuantity *int64 `gorm:"default:0;" json:"purchase_quantity"` // 购买数量
Snapshot *map[string]interface{} `gorm:"default:'';" json:"snapshot"` //
IsSelected *int64 `gorm:"default:0;" json:"is_selected"` // 是否被选中 0非 1是
IsHighlyCustomized *int64 `gorm:"default:0;" json:"is_highly_customized"` // 是否高度定制 0非 1是针对客人高度定制只能后台增加如购物车
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"` //
}
// 购物车快照数据结构
type CartSnapshot struct {
Logo string `json:"logo"` //logo地址
LogoMaterialMetadata interface{} `json:"logo_material_metadata"` //logo素材信息
CombineImage string `json:"combine_image"` //刀版图地址
RenderImage string `json:"render_image"` //渲染结果图
TemplateInfo TemplateInfo `json:"template_info"` //模板数据
ModelInfo ModelInfo `json:"model_info"` //模型的数据
FittingInfo FittingInfo `json:"fitting_info"` //配件信息
SizeInfo SizeInfo `json:"size_info"` //尺寸基本信息
ProductInfo ProductInfo `json:"product_info"` //产品基本信息(只记录不要使用)
UserDiyInformation UserDiyInformation `json:"user_diy_information"` //用户diy数据
LightInfo LightInfo `json:"light_info"` //灯光数据
}
type ProductInfo struct {
ProductName string `json:"product_name"` //产品名
ProductSn string `json:"product_sn"` //产品sn
ProductWebsiteUnit string `json:"product_website_unit"` //产品前台网站单位
}
type ModelInfo struct {
ModelJson interface{} `json:"model_json"` //模型设计json数据
}
type FittingInfo struct {
FittingJson interface{} `json:"fitting_json"` //配件设计json数据
FittingName string `json:"fitting_name"` //配件名称
}
type TemplateInfo struct {
SwitchInfo interface{} `json:"switch_info"`
TemplateJson interface{} `json:"template_json"` //模板设计json数据
TemplateTag string `json:"template_tag"` //模板标签
SelectColorIndex int64 `json:"select_color_index"` //颜色选择索引
}
type SizeInfo struct {
Inch string `json:"inch"`
Cm string `json:"cm"`
Capacity string `json:"capacity"`
}
type UserDiyInformation struct {
Phone string `json:"phone"` //电话
Address string `json:"address"` //地址
Website string `json:"website"` //网站
Qrcode string `json:"qrcode"` //二维码
Slogan string `json:"slogan"` //slogan
}
type LightInfo struct {
LightJson interface{} `json:"light_json"` //灯光设计json数据
LightName string `json:"light_name"` //名称
}
// 获取单个
func (s *FsShoppingCartModel) FindOne(ctx context.Context, id int64, fields ...string) (resp *FsShoppingCart, err error) {
db := s.db.WithContext(ctx).Where("id = ?", id)
if len(fields) > 0 {
db = db.Select(fields[0])
}
err = db.Take(&resp).Error
return resp, err
}
// 获取用户购物车指定item
func (s *FsShoppingCartModel) FineOneUserCart(ctx context.Context, id, userId int64, fields ...string) (resp *FsShoppingCart, err error) {
db := s.db.WithContext(ctx).Where("user_id = ? and id = ?", userId, id)
if len(fields) > 0 {
db = db.Select(fields[0])
}
err = db.Take(&resp).Error
return resp, err
}
// 创建
func (s *FsShoppingCartModel) Create(ctx context.Context, data *FsShoppingCart) error {
return s.db.WithContext(ctx).Model(&FsShoppingCart{}).Create(&data).Error
}
// 删除
func (s *FsShoppingCartModel) Delete(ctx context.Context, userId, id int64) error {
return s.db.WithContext(ctx).Model(&FsShoppingCart{}).Where("user_id = ? and id = ?", userId, id).Delete(&FsShoppingCart{}).Error
}
// 更新
func (s *FsShoppingCartModel) Update(ctx context.Context, id, userId int64, data *FsShoppingCart) error {
return s.db.WithContext(ctx).Model(&FsShoppingCart{}).Where("user_id = ? and id = ?", userId, id).Updates(&data).Error
}
// 获取用户购物车数量
func (s *FsShoppingCartModel) CountUserCart(ctx context.Context, userId int64) (total int64, err error) {
err = s.db.WithContext(ctx).Model(&FsShoppingCart{}).Where("user_id = ?", userId).Limit(1).Count(&total).Error
return total, err
}
// 获取多个
func (s *FsShoppingCartModel) GetAllByIds(ctx context.Context, ids []int64, sort string, fields ...string) (resp []FsShoppingCart, err error) {
if len(ids) == 0 {
return
}
db := s.db.WithContext(ctx).Model(&FsShoppingCart{}).Where("id in (?)", ids)
if len(fields) > 0 {
db = db.Select(fields[0])
}
if sort != "" {
db = db.Order(sort)
}
err = db.Find(&resp).Error
return resp, err
}
// 获取用户所有的购物车
type GetAllCartsByParamReq struct {
Ids []int64 //id集合
UserId int64 //用户id
Fields string //筛选的字段
Sort string //排序
Page int //当前页
Limit int //每页数量
}
func (s *FsShoppingCartModel) GetAllCartsByParam(ctx context.Context, req GetAllCartsByParamReq) (resp []FsShoppingCart, total int64, err error) {
db := s.db.WithContext(ctx).Model(&FsShoppingCart{})
if req.UserId > 0 {
db = db.Where("user_id = ?", req.UserId)
}
if len(req.Ids) > 0 {
db = db.Where("id in (?)", req.Ids)
}
if req.Fields != "" {
db = db.Select(req.Fields)
}
if req.Sort != "" {
db = db.Order(req.Sort)
}
//查询数量
if err = db.Limit(1).Count(&total).Error; err != nil {
return nil, 0, err
}
offset := (req.Page - 1) * req.Limit
err = db.Offset(offset).Limit(req.Limit).Find(&resp).Error
return resp, total, err
}