Files
assets/service/asset/private_sku_service.go
2026-03-18 10:18:03 +08:00

190 lines
5.8 KiB
Go

package service
import (
dao "assets/dao/asset"
dto "assets/model/dto/asset"
"context"
"github.com/gogf/gf/v2/errors/gerror"
"go.mongodb.org/mongo-driver/v2/bson"
)
type privateSku struct{}
// PrivateSku 私域SKU服务
var PrivateSku = new(privateSku)
// CreatePrivateSku 创建私域SKU
func (s *privateSku) CreatePrivateSku(ctx context.Context, req *dto.CreatePrivateSkuReq) (*dto.CreatePrivateSkuRes, error) {
// 保存到数据库
ids, err := dao.PrivateSku.Insert(ctx, req)
if err != nil {
return nil, gerror.Wrap(err, "创建私域SKU失败")
}
var id *bson.ObjectID
if len(ids) > 0 {
if objectID, ok := ids[0].(bson.ObjectID); ok {
id = &objectID
}
}
return &dto.CreatePrivateSkuRes{ID: id}, nil
}
// BatchCreatePrivateSku 批量创建私域SKU
func (s *privateSku) BatchCreatePrivateSku(ctx context.Context, req *dto.BatchCreatePrivateSkuReq) (*dto.BatchCreatePrivateSkuRes, error) {
// 保存到数据库
ids, err := dao.PrivateSku.BatchInsert(ctx, req)
if err != nil {
return nil, gerror.Wrap(err, "批量创建私域SKU失败")
}
// 转换ID列表
idList := make([]*bson.ObjectID, 0, len(ids))
for _, id := range ids {
if objectID, ok := id.(bson.ObjectID); ok {
idList = append(idList, &objectID)
}
}
return &dto.BatchCreatePrivateSkuRes{IDs: idList}, nil
}
// UpdatePrivateSku 更新私域SKU
func (s *privateSku) UpdatePrivateSku(ctx context.Context, req *dto.UpdatePrivateSkuReq) error {
// 更新到数据库
err := dao.PrivateSku.Update(ctx, req)
if err != nil {
return gerror.Wrap(err, "更新私域SKU失败")
}
return nil
}
// DeletePrivateSku 删除私域SKU
func (s *privateSku) DeletePrivateSku(ctx context.Context, id *bson.ObjectID) error {
return dao.PrivateSku.DeleteFake(ctx, id)
}
// GetPrivateSku 获取私域SKU详情
func (s *privateSku) GetPrivateSku(ctx context.Context, id *bson.ObjectID) (*dto.GetPrivateSkuRes, error) {
sku, err := dao.PrivateSku.GetOne(ctx, id)
if err != nil {
return nil, gerror.Wrap(err, "获取私域SKU失败")
}
// 转换为响应
res := &dto.GetPrivateSkuRes{
ID: sku.Id,
SkuName: sku.SkuName,
ImageURL: sku.ImageURL,
Price: sku.Price,
Stock: sku.Stock,
Sort: sku.Sort,
PrivateCategoryPath: sku.PrivateCategoryPath,
CreatedAt: sku.CreatedAt.Format("2006-01-02 15:04:05"),
UpdatedAt: sku.UpdatedAt.Format("2006-01-02 15:04:05"),
}
return res, nil
}
// ListPrivateSku 获取私域SKU列表
func (s *privateSku) ListPrivateSku(ctx context.Context, req *dto.ListPrivateSkuReq) (*dto.ListPrivateSkuRes, error) {
// 获取数据
skus, total, err := dao.PrivateSku.List(ctx, req)
if err != nil {
return nil, gerror.Wrap(err, "获取私域SKU列表失败")
}
// 转换为响应
listItems := make([]*dto.PrivateSkuListItem, 0, len(skus))
for _, sku := range skus {
listItems = append(listItems, &dto.PrivateSkuListItem{
ID: sku.Id,
SkuName: sku.SkuName,
ImageURL: sku.ImageURL,
Price: sku.Price,
Stock: sku.Stock,
Sort: sku.Sort,
PrivateCategoryPath: sku.PrivateCategoryPath,
CreatedAt: sku.CreatedAt.Format("2006-01-02 15:04:05"),
UpdatedAt: sku.UpdatedAt.Format("2006-01-02 15:04:05"),
})
}
return &dto.ListPrivateSkuRes{
List: listItems,
Total: total,
}, nil
}
// UpdatePrivateSkuStock 更新私域SKU库存
func (s *privateSku) UpdatePrivateSkuStock(ctx context.Context, id *bson.ObjectID, stockChange int) error {
return dao.PrivateSku.UpdateStock(ctx, id, stockChange)
}
// GenerateTestData 生成测试数据
func (s *privateSku) GenerateTestData(ctx context.Context) error {
testData := &dto.BatchCreatePrivateSkuReq{
Skus: []dto.CreatePrivateSkuReq{
{
SkuName: "联想ThinkPad X1 Carbon 14英寸 i7 16G 512G",
ImageURL: "https://example.com/images/lenovo_x1_carbon.jpg",
Price: 899900, // 8999.00元
Stock: 100,
Sort: 1,
PrivateCategoryPath: "/笔记本电脑/ThinkPad",
},
{
SkuName: "联想ThinkPad X1 Carbon 14英寸 i7 32G 1T",
ImageURL: "https://example.com/images/lenovo_x1_carbon_32g.jpg",
Price: 1199900, // 11999.00元
Stock: 50,
Sort: 2,
PrivateCategoryPath: "/笔记本电脑/ThinkPad",
},
{
SkuName: "戴尔Latitude 7440 14英寸 i7 16G 512G",
ImageURL: "https://example.com/images/dell_latitude_7440.jpg",
Price: 750000, // 7500.00元
Stock: 80,
Sort: 1,
PrivateCategoryPath: "/笔记本电脑/Latitude",
},
{
SkuName: "戴尔Latitude 7440 14英寸 i7 32G 1T",
ImageURL: "https://example.com/images/dell_latitude_7440_32g.jpg",
Price: 999900, // 9999.00元
Stock: 60,
Sort: 2,
PrivateCategoryPath: "/笔记本电脑/Latitude",
},
{
SkuName: "惠普暗影精灵9 16.1英寸 i7 32G 1T RTX4060",
ImageURL: "https://example.com/images/hp_omen_9.jpg",
Price: 849900, // 8499.00元
Stock: 70,
Sort: 1,
PrivateCategoryPath: "/游戏笔记本/暗影精灵",
},
{
SkuName: "惠普暗影精灵9 16.1英寸 i9 32G 2T RTX4070",
ImageURL: "https://example.com/images/hp_omen_9_i9.jpg",
Price: 1249900, // 12499.00元
Stock: 40,
Sort: 2,
PrivateCategoryPath: "/游戏笔记本/暗影精灵",
},
},
}
_, err := s.BatchCreatePrivateSku(ctx, testData)
if err != nil {
return gerror.Wrap(err, "生成测试数据失败")
}
return nil
}