190 lines
5.8 KiB
Go
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
|
|
}
|