From 161ee4304badcefbd0a6560424930e695fe10425 Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Thu, 10 Aug 2023 18:38:31 +0800 Subject: [PATCH 01/23] fix --- server/render/consumer/assemble_render_data.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/server/render/consumer/assemble_render_data.go b/server/render/consumer/assemble_render_data.go index 5334db5b..3c7f1ffa 100644 --- a/server/render/consumer/assemble_render_data.go +++ b/server/render/consumer/assemble_render_data.go @@ -18,6 +18,7 @@ import ( "gorm.io/gorm" "io/ioutil" "strconv" + "time" ) // 这里请求的py接口返回数据 @@ -227,7 +228,7 @@ func getCombineImage(ctx context.Context, svcCtx *svc.ServiceContext, parseInfo /*f, _ := os.Create("a.txt") defer f.Close() f.Write(postData)*/ - httpRsp, err := curl.ApiCall(url, "POST", header, bytes.NewReader(postData), 20) + httpRsp, err := curl.ApiCall(url, "POST", header, bytes.NewReader(postData), time.Second*20) if err != nil { logx.Error("failed to combine logo:", err) return "", err From 83b0b7f5ab5a520edc89fba180edfb0915edcdc6 Mon Sep 17 00:00:00 2001 From: Hiven Date: Thu, 10 Aug 2023 19:08:06 +0800 Subject: [PATCH 02/23] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8D=E4=B8=8A=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- model/gmodel/fs_cart_logic.go | 20 +++++++ .../gmodel/fs_order_detail_template_logic.go | 4 ++ model/gmodel/fs_order_logic.go | 15 +++++ model/gmodel/fs_pay_logic.go | 29 +++++++++ model/gmodel/fs_product_design_logic.go | 17 ++++++ model/gmodel/fs_refund_reason_logic.go | 20 +++++++ model/gmodel/fs_resource_logic.go | 21 +++++++ .../internal/logic/userordercancellogic.go | 4 +- .../internal/logic/orderpaymentintentlogic.go | 8 +-- .../pay/internal/logic/stripewebhooklogic.go | 23 ++++---- .../internal/handler/uploadlogohandler.go | 2 +- .../internal/logic/uploadcallbacklogic.go | 10 ++-- .../upload/internal/logic/uploadlogologic.go | 59 +++++++++++++++---- server/upload/internal/types/types.go | 9 ++- server_api/upload.api | 9 ++- 15 files changed, 209 insertions(+), 41 deletions(-) diff --git a/model/gmodel/fs_cart_logic.go b/model/gmodel/fs_cart_logic.go index d86b18be..e7ed91b1 100755 --- a/model/gmodel/fs_cart_logic.go +++ b/model/gmodel/fs_cart_logic.go @@ -4,6 +4,7 @@ package gmodel import ( "context" + "gorm.io/gorm" ) type FindOneCartByParamsReq struct { @@ -94,3 +95,22 @@ func (c *FsCartModel) DeleteCartsByIds(ctx context.Context, ids []int64) ( err e } return c.db.Table(c.name).WithContext(ctx).Model(&FsCart{}).Where("`id` in (?)", ids).Update("status", 0).Error } + +func (c *FsCartModel) RBDeleteCartsByIds(rowBuilder *gorm.DB,ids []int64) ( err error) { + if len(ids) == 0 { + return + } + return rowBuilder.Where("`id` in (?)", ids).Update("status", 0).Error +} + +func (c *FsCartModel) BuilderTrans(ctx context.Context,selectData []string) *gorm.DB { + var rowBuilder = c.db.WithContext(ctx) + + if selectData != nil { + rowBuilder = rowBuilder.Select(selectData) + } else { + rowBuilder = rowBuilder.Select("*") + } + return rowBuilder +} + diff --git a/model/gmodel/fs_order_detail_template_logic.go b/model/gmodel/fs_order_detail_template_logic.go index cbdcd360..c0cdf641 100755 --- a/model/gmodel/fs_order_detail_template_logic.go +++ b/model/gmodel/fs_order_detail_template_logic.go @@ -26,6 +26,10 @@ func (dt *FsOrderDetailTemplateModel) FindOne(ctx context.Context, id int64) (re return resp, err } +func (dt *FsOrderDetailTemplateModel) RBCreate(ctx context.Context, data *FsOrderDetailTemplate) error { + return dt.db.WithContext(ctx).Create(&data).Error +} + func (m *FsOrderDetailTemplateModel) TableName() string { return m.name } diff --git a/model/gmodel/fs_order_logic.go b/model/gmodel/fs_order_logic.go index 60ce74d8..c0d27763 100755 --- a/model/gmodel/fs_order_logic.go +++ b/model/gmodel/fs_order_logic.go @@ -28,6 +28,10 @@ func (o *FsOrderModel) Update(ctx context.Context, data *FsOrder) error { return o.db.WithContext(ctx).Model(&FsOrder{}).Where("`id` = ?", data.Id).Updates(&data).Error } +func (o *FsOrderModel) RBUpdate(ctx context.Context, data *FsOrder) error { + return o.db.WithContext(ctx).Where("`id` = ?", data.Id).Updates(&data).Error +} + func (o *FsOrderModel) Create(ctx context.Context, data *FsOrder) error { return o.db.WithContext(ctx).Model(&FsOrder{}).Create(&data).Error } @@ -120,6 +124,17 @@ func (m *FsOrderModel) RowSelectBuilder(selectData []string) *gorm.DB { return rowBuilder } +func (m *FsOrderModel) BuilderTrans(selectData []string) *gorm.DB { + var rowBuilder = m.db + + if selectData != nil { + rowBuilder = rowBuilder.Select(selectData) + } else { + rowBuilder = rowBuilder.Select("*") + } + return rowBuilder +} + func (m *FsOrderModel) FindCount(ctx context.Context, countBuilder *gorm.DB, filterMap map[string]string) (int64, error) { var count int64 diff --git a/model/gmodel/fs_pay_logic.go b/model/gmodel/fs_pay_logic.go index c23f3b36..2ae4ebc9 100644 --- a/model/gmodel/fs_pay_logic.go +++ b/model/gmodel/fs_pay_logic.go @@ -29,6 +29,14 @@ func (p *FsPayModel) GetListByOrderNumberStage(ctx context.Context, sn string, s return resp, nil } +func (p *FsPayModel) RBGetListByOrderNumberStage(ctx context.Context, sn string, stage int64) (resp *FsPay, err error) { + err = p.db.WithContext(ctx).Where("`order_number` = ? ", sn).Where("`pay_stage` = ? ", stage).Take(&resp).Error + if err != nil { + return nil, err + } + return resp, nil +} + func (p *FsPayModel) CreateOrUpdate(ctx context.Context, req *FsPay) (resp *FsPay, err error) { rowBuilder := p.db.Table(p.name).WithContext(ctx) if req.Id > 0 { @@ -39,6 +47,16 @@ func (p *FsPayModel) CreateOrUpdate(ctx context.Context, req *FsPay) (resp *FsPa return req, err } +func (p *FsPayModel) RBCreateOrUpdate(ctx context.Context, req *FsPay) (resp *FsPay, err error) { + rowBuilder := p.db.WithContext(ctx) + if req.Id > 0 { + err = rowBuilder.Save(req).Error + } else { + err = rowBuilder.Create(req).Error + } + return req, err +} + func (m *FsPayModel) RowSelectBuilder(selectData []string) *gorm.DB { var rowBuilder = m.db.Table(m.name) @@ -50,6 +68,17 @@ func (m *FsPayModel) RowSelectBuilder(selectData []string) *gorm.DB { return rowBuilder } +func (m *FsPayModel) BuilderTrans(selectData []string) *gorm.DB { + var rowBuilder = m.db + + if selectData != nil { + rowBuilder = rowBuilder.Select(selectData) + } else { + rowBuilder = rowBuilder.Select("*") + } + return rowBuilder +} + func (m *FsPayModel) FindCount(ctx context.Context, countBuilder *gorm.DB, filterMap map[string]string) (int64, error) { var count int64 diff --git a/model/gmodel/fs_product_design_logic.go b/model/gmodel/fs_product_design_logic.go index 71f26d17..2dfe5dcc 100755 --- a/model/gmodel/fs_product_design_logic.go +++ b/model/gmodel/fs_product_design_logic.go @@ -2,6 +2,8 @@ package gmodel import ( "context" + + "gorm.io/gorm" ) func (d *FsProductDesignModel) FindOneBySn(ctx context.Context, sn string, userId int64) (resp *FsProductDesign, err error) { @@ -39,6 +41,21 @@ func (d *FsProductDesignModel) UpdateByIds(ctx context.Context, ids []int64, dat return d.db.Table(d.name).WithContext(ctx).Model(&FsProductDesign{}).Where("`id` in ?", ids).Updates(&data).Error } +func (d *FsProductDesignModel) RBUpdateByIds(rowBuilder *gorm.DB, ids []int64, data *FsProductDesign) error { + return rowBuilder.Where("`id` in ?", ids).Updates(&data).Error +} + +func (m *FsProductDesignModel) BuilderTrans(ctx context.Context, selectData []string) *gorm.DB { + var rowBuilder = m.db.WithContext(ctx) + + if selectData != nil { + rowBuilder = rowBuilder.Select(selectData) + } else { + rowBuilder = rowBuilder.Select("*") + } + return rowBuilder +} + func (m *FsProductDesignModel) TableName() string { return m.name } diff --git a/model/gmodel/fs_refund_reason_logic.go b/model/gmodel/fs_refund_reason_logic.go index 14acda7a..5a6fce1b 100644 --- a/model/gmodel/fs_refund_reason_logic.go +++ b/model/gmodel/fs_refund_reason_logic.go @@ -36,6 +36,16 @@ func (m *FsRefundReasonModel) CreateOrUpdate(ctx context.Context, req *FsRefundR return req, err } +func (m *FsRefundReasonModel) RBCreateOrUpdate(ctx context.Context, req *FsRefundReason) (resp *FsRefundReason, err error) { + rowBuilder := m.db.WithContext(ctx) + if req.Id > 0 { + err = rowBuilder.Save(req).Error + } else { + err = rowBuilder.Create(req).Error + } + return req, err +} + func (m *FsRefundReasonModel) FindOneByQuery(ctx context.Context, rowBuilder *gorm.DB, filterMap map[string]string) (*FsRefundReason, error) { var resp FsRefundReason @@ -62,6 +72,16 @@ func (m *FsRefundReasonModel) RowSelectBuilder(selectData []string) *gorm.DB { return rowBuilder } +func (m *FsRefundReasonModel) BuilderTrans(selectData []string) *gorm.DB { + var rowBuilder = m.db + if selectData != nil { + rowBuilder = rowBuilder.Select(selectData) + } else { + rowBuilder = rowBuilder.Select("*") + } + return rowBuilder +} + func (m *FsRefundReasonModel) TableName() string { return m.name } diff --git a/model/gmodel/fs_resource_logic.go b/model/gmodel/fs_resource_logic.go index 19e095db..31212da2 100644 --- a/model/gmodel/fs_resource_logic.go +++ b/model/gmodel/fs_resource_logic.go @@ -24,6 +24,16 @@ func (p *FsResourceModel) Update(ctx context.Context, req *FsResource) (resp *Fs return req, err } +func (p *FsResourceModel) BuilderCreate(ctx context.Context, rowBuilder *gorm.DB, req *FsResource) (resp *FsResource, err error) { + err = rowBuilder.WithContext(ctx).Create(req).Error + return req, err +} + +func (p *FsResourceModel) BuilderUpdate(ctx context.Context, rowBuilder *gorm.DB, req *FsResource) (resp *FsResource, err error) { + err = rowBuilder.WithContext(ctx).Where("resource_id =?", req.ResourceId).Save(req).Error + return req, err +} + func (m *FsResourceModel) FindOneByQuery(ctx context.Context, rowBuilder *gorm.DB, filterMap map[string]string) (*FsResource, error) { var resp FsResource @@ -50,6 +60,17 @@ func (m *FsResourceModel) RowSelectBuilder(selectData []string) *gorm.DB { return rowBuilder } +func (m *FsResourceModel) BuilderTrans(selectData []string) *gorm.DB { + var rowBuilder = m.db + + if selectData != nil { + rowBuilder = rowBuilder.Select(selectData) + } else { + rowBuilder = rowBuilder.Select("*") + } + return rowBuilder +} + // 事务 func (m *FsResourceModel) Trans(ctx context.Context, fn func(ctx context.Context, connGorm *gorm.DB) error) error { diff --git a/server/home-user-auth/internal/logic/userordercancellogic.go b/server/home-user-auth/internal/logic/userordercancellogic.go index 13211fcf..6164da9c 100644 --- a/server/home-user-auth/internal/logic/userordercancellogic.go +++ b/server/home-user-auth/internal/logic/userordercancellogic.go @@ -80,14 +80,14 @@ func (l *UserOrderCancelLogic) UserOrderCancel(req *types.UserOrderCancelReq, us err = l.svcCtx.MysqlConn.Transaction(func(tx *gorm.DB) error { // 修改订单信息 orderModelTS := gmodel.NewFsOrderModel(tx) - err = orderModelTS.Update(ctx, orderInfo) + err = orderModelTS.RBUpdate(ctx, orderInfo) if err != nil { return err } // 新增退款记录 var isRefund int64 = 0 refundReasonModelTS := gmodel.NewFsRefundReasonModel(tx) - refundReasonModelTS.CreateOrUpdate(ctx, &gmodel.FsRefundReason{ + refundReasonModelTS.RBCreateOrUpdate(ctx, &gmodel.FsRefundReason{ IsRefund: &isRefund, RefundReasonId: &req.RefundReasonId, RefundReason: &req.RefundReason, diff --git a/server/pay/internal/logic/orderpaymentintentlogic.go b/server/pay/internal/logic/orderpaymentintentlogic.go index fdc608ad..85946f40 100644 --- a/server/pay/internal/logic/orderpaymentintentlogic.go +++ b/server/pay/internal/logic/orderpaymentintentlogic.go @@ -116,7 +116,7 @@ func (l *OrderPaymentIntentLogic) OrderPaymentIntent(req *types.OrderPaymentInte var fspay *gmodel.FsPay newFsPayModel := gmodel.NewFsPayModel(connGorm) if *orderInfo.Status == int64(constants.STATUS_NEW_NOT_PAY) { - fspay, err = newFsPayModel.GetListByOrderNumberStage(ctx, *orderInfo.Sn, 1) + fspay, err = newFsPayModel.RBGetListByOrderNumberStage(ctx, *orderInfo.Sn, 1) if err != nil { if !errors.Is(err, gorm.ErrRecordNotFound) { return err @@ -124,7 +124,7 @@ func (l *OrderPaymentIntentLogic) OrderPaymentIntent(req *types.OrderPaymentInte } payStage = 1 } else { - fspay, err = newFsPayModel.GetListByOrderNumberStage(ctx, *orderInfo.Sn, 2) + fspay, err = newFsPayModel.RBGetListByOrderNumberStage(ctx, *orderInfo.Sn, 2) if err != nil { if !errors.Is(err, gorm.ErrRecordNotFound) { return err @@ -146,7 +146,7 @@ func (l *OrderPaymentIntentLogic) OrderPaymentIntent(req *types.OrderPaymentInte } // 订单信息--修改 - err = gmodel.NewFsOrderModel(connGorm).Update(ctx, orderInfo) + err = gmodel.NewFsOrderModel(connGorm).RBUpdate(ctx, orderInfo) if err != nil { return err } @@ -167,7 +167,7 @@ func (l *OrderPaymentIntentLogic) OrderPaymentIntent(req *types.OrderPaymentInte fspay.OrderSource = &orderSource fspay.PayStatus = &payStatus - _, err = newFsPayModel.CreateOrUpdate(ctx, fspay) + _, err = newFsPayModel.RBCreateOrUpdate(ctx, fspay) if err != nil { return err } diff --git a/server/pay/internal/logic/stripewebhooklogic.go b/server/pay/internal/logic/stripewebhooklogic.go index 5f327ab5..a0fe1dd2 100644 --- a/server/pay/internal/logic/stripewebhooklogic.go +++ b/server/pay/internal/logic/stripewebhooklogic.go @@ -157,7 +157,7 @@ func (l *StripeWebhookLogic) HandleChargeRefunded(chargeRefunded *stripe.Charge) err = l.svcCtx.MysqlConn.Transaction(func(connGorm *gorm.DB) error { // 查询支付记录 payModelT := gmodel.NewFsPayModel(connGorm) - payModelTRSB := payModelT.RowSelectBuilder(nil) + payModelTRSB := payModelT.BuilderTrans(nil) payModelTRSB1 := payModelTRSB.Where("trade_no = ?", chargeRefunded.PaymentIntent.ID).Where("pay_status = ?", constants.PAYSTATUS_SUCCESS).Where("is_refund = ?", 0) payInfo, err := payModelT.FindOneByQuery(ctx, payModelTRSB1, nil) if err != nil { @@ -165,7 +165,7 @@ func (l *StripeWebhookLogic) HandleChargeRefunded(chargeRefunded *stripe.Charge) } // 更新支付记录 *payInfo.IsRefund = 1 - _, err = payModelT.CreateOrUpdate(ctx, payInfo) + _, err = payModelT.RBCreateOrUpdate(ctx, payInfo) if err != nil { return err } @@ -175,7 +175,7 @@ func (l *StripeWebhookLogic) HandleChargeRefunded(chargeRefunded *stripe.Charge) if count == 0 { // 退款完成更新订单状态 orderModelT := gmodel.NewFsOrderModel(connGorm) - orderModelTRSB := orderModelT.RowSelectBuilder(nil).Where("sn =?", payInfo.OrderNumber) + orderModelTRSB := orderModelT.BuilderTrans(nil).Where("sn =?", payInfo.OrderNumber) orderInfoRel, err := orderModelT.FindOneByQuery(ctx, orderModelTRSB, nil) if err != nil { return err @@ -192,13 +192,14 @@ func (l *StripeWebhookLogic) HandleChargeRefunded(chargeRefunded *stripe.Charge) // 记录退款原因 refundReasonModelT := gmodel.NewFsRefundReasonModel(connGorm) - refundReasonModelTRSB := refundReasonModelT.RowSelectBuilder(nil).Where("order_id =?", orderInfoRel.Id) - refundReasonInfo, err := refundReasonModelT.FindOneByQuery(ctx, refundReasonModelTRSB, nil) + refundReasonModelTRSB := refundReasonModelT.BuilderTrans(nil) + refundReasonModelTRSB1 := refundReasonModelTRSB.Where("order_id =?", orderInfoRel.Id) + refundReasonInfo, err := refundReasonModelT.FindOneByQuery(ctx, refundReasonModelTRSB1, nil) if err != nil { return err } *refundReasonInfo.IsRefund = 1 - _, err = refundReasonModelT.CreateOrUpdate(ctx, refundReasonInfo) + _, err = refundReasonModelT.RBCreateOrUpdate(ctx, refundReasonInfo) if err != nil { return err } @@ -304,15 +305,16 @@ func (l *StripeWebhookLogic) HandlePaymentIntentSucceeded(paymentIntent *stripe. *payInfo.CardNo = card *payInfo.Brand = brand *payInfo.TradeNo = paymentIntent.ID - _, err = payModelT.CreateOrUpdate(ctx, payInfo) + _, err = payModelT.RBCreateOrUpdate(ctx, payInfo) if err != nil { return err } // 更新设计数据 productDesignModelT := gmodel.NewFsProductDesignModel(connGorm) + productDesignModelTRSB := productDesignModelT.BuilderTrans(ctx, nil) var isPay int64 = 1 - err = productDesignModelT.UpdateByIds(ctx, designIds, &gmodel.FsProductDesign{IsPay: &isPay}) + err = productDesignModelT.RBUpdateByIds(productDesignModelTRSB, designIds, &gmodel.FsProductDesign{IsPay: &isPay}) if err != nil { return err } @@ -331,7 +333,8 @@ func (l *StripeWebhookLogic) HandlePaymentIntentSucceeded(paymentIntent *stripe. // 删除购物车 cartModelT := gmodel.NewFsCartModel(connGorm) - err = cartModelT.DeleteCartsByIds(ctx, cartIds) + cartModelTRSB := cartModelT.BuilderTrans(ctx, nil) + err = cartModelT.RBDeleteCartsByIds(cartModelTRSB, cartIds) if err != nil { return err } @@ -353,7 +356,7 @@ func (l *StripeWebhookLogic) HandlePaymentIntentSucceeded(paymentIntent *stripe. orderInfo.Ptime = &nowTime orderInfo.PayedAmount = &orderPayedAmount orderModelT := gmodel.NewFsOrderModel(connGorm) - err = orderModelT.Update(ctx, orderInfo) + err = orderModelT.RBUpdate(ctx, orderInfo) if err != nil { return err } diff --git a/server/upload/internal/handler/uploadlogohandler.go b/server/upload/internal/handler/uploadlogohandler.go index 52c58424..6fee9634 100644 --- a/server/upload/internal/handler/uploadlogohandler.go +++ b/server/upload/internal/handler/uploadlogohandler.go @@ -21,7 +21,7 @@ func UploadLogoHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { } // 创建一个业务逻辑层实例 - l := logic.NewUploadLogoLogic(r.Context(), svcCtx) + l := logic.NewUploadLogoLogic(r, svcCtx) rl := reflect.ValueOf(l) basic.BeforeLogic(w, r, rl) diff --git a/server/upload/internal/logic/uploadcallbacklogic.go b/server/upload/internal/logic/uploadcallbacklogic.go index 4c67de50..615052fd 100644 --- a/server/upload/internal/logic/uploadcallbacklogic.go +++ b/server/upload/internal/logic/uploadcallbacklogic.go @@ -66,8 +66,10 @@ func (l *UploadCallbackLogic) UploadCallback(req *types.UploadCallbackReq, useri ctx := l.ctx err := l.svcCtx.MysqlConn.Transaction(func(connGorm *gorm.DB) error { - resourceModelTS := gmodel.NewFsResourceModel(l.svcCtx.MysqlConn) - resourceInfo, err := resourceModelTS.FindOneById(ctx, req.ResourceId) + resourceModelTS := gmodel.NewFsResourceModel(connGorm) + transBuilder := resourceModelTS.BuilderTrans(nil) + transBuilderFind := transBuilder.Where("resource_id =?", req.ResourceId) + resourceInfo, err := resourceModelTS.FindOneByQuery(ctx, transBuilderFind, nil) if err != nil { return err } @@ -84,9 +86,9 @@ func (l *UploadCallbackLogic) UploadCallback(req *types.UploadCallbackReq, useri fsResource.BucketName = bucketName fsResource.Version = &version if resourceInfo.ResourceId == "" { - _, err = resourceModelTS.Create(ctx, fsResource) + _, err = resourceModelTS.BuilderCreate(ctx, transBuilder, fsResource) } else { - _, err = resourceModelTS.Update(ctx, fsResource) + _, err = resourceModelTS.BuilderUpdate(ctx, transBuilder, fsResource) } return err }) diff --git a/server/upload/internal/logic/uploadlogologic.go b/server/upload/internal/logic/uploadlogologic.go index 7bbc20e2..ea98bf45 100644 --- a/server/upload/internal/logic/uploadlogologic.go +++ b/server/upload/internal/logic/uploadlogologic.go @@ -6,7 +6,10 @@ import ( "fusenapi/utils/auth" "fusenapi/utils/basic" "fusenapi/utils/curl" + "fusenapi/utils/file" + "fusenapi/utils/hash" "io" + "net/http" "strings" "time" @@ -22,13 +25,15 @@ type UploadLogoLogic struct { logx.Logger ctx context.Context svcCtx *svc.ServiceContext + r *http.Request } -func NewUploadLogoLogic(ctx context.Context, svcCtx *svc.ServiceContext) *UploadLogoLogic { +func NewUploadLogoLogic(r *http.Request, svcCtx *svc.ServiceContext) *UploadLogoLogic { return &UploadLogoLogic{ - Logger: logx.WithContext(ctx), - ctx: ctx, + Logger: logx.WithContext(r.Context()), + ctx: r.Context(), svcCtx: svcCtx, + r: r, } } @@ -61,6 +66,43 @@ func (l *UploadLogoLogic) UploadLogo(req *types.UploadLogoReq, userinfo *auth.Us userId = userinfo.UserId } + //设置内存大小 + l.r.ParseMultipartForm(32 << 20) + + fileObject, _, err := l.r.FormFile("file") + if err != nil { + logx.Error(err) + return resp.SetStatus(basic.CodeFileUploadErr, "file upload err,no files") + } + + // 读取数据流 + ioData, err := io.ReadAll(fileObject) + if err != nil { + logx.Error(err) + return resp.SetStatus(basic.CodeFileUploadErr, "file upload err,no files") + } + + // 上传文件 + var upload = file.Upload{ + Ctx: l.ctx, + MysqlConn: l.svcCtx.MysqlConn, + AwsSession: l.svcCtx.AwsSession, + } + var resourceId string = hash.JsonHashKey(req.FileKey) + uploadRes, err := upload.UploadFileByByte(&file.UploadBaseReq{ + FileHash: resourceId, + FileByte: ioData, + UploadBucket: 1, + ApiType: 2, + UserId: userId, + GuestId: guestId, + }) + + if err != nil { + logx.Error(err) + return resp.SetStatus(basic.CodeFileUploadErr, "upload file failed") + } + var logoWidth int64 var logoHeight int64 // 查看sku是否存在 @@ -82,17 +124,14 @@ func (l *UploadLogoLogic) UploadLogo(req *types.UploadLogoReq, userinfo *auth.Us logoHeight = 200 } var resultStr string - var err error var postMap = make(map[string]interface{}, 1) - postMap["logo_url"] = req.ResourceUrl + postMap["logo_url"] = uploadRes.ResourceUrl postMapB, _ := json.Marshal(postMap) - //result, err := http.Post(l.svcCtx.Config.BLMService.ImageProcess.Url, "application/json", strings.NewReader(string(postMapB))) - var headerData = make(map[string]string, 1) headerData["Content-Type"] = "application/json" - result, err := curl.ApiCall(l.svcCtx.Config.BLMService.ImageProcess.Url, "POST", headerData, strings.NewReader(string(postMapB)), 20) + result, err := curl.ApiCall(l.svcCtx.Config.BLMService.ImageProcess.Url, "POST", headerData, strings.NewReader(string(postMapB)), time.Second*20) if err != nil { logx.Error(err) @@ -118,8 +157,8 @@ func (l *UploadLogoLogic) UploadLogo(req *types.UploadLogoReq, userinfo *auth.Us Module: &module, UserId: &userId, GuestId: &guestId, - ResourceId: &req.ResourceId, - ResourceUrl: &req.ResourceUrl, + ResourceId: &uploadRes.ResourceId, + ResourceUrl: &uploadRes.ResourceUrl, Metadata: &resultStr, CreateAt: &nowTime, }) diff --git a/server/upload/internal/types/types.go b/server/upload/internal/types/types.go index b6363f9f..6ac757ae 100644 --- a/server/upload/internal/types/types.go +++ b/server/upload/internal/types/types.go @@ -16,11 +16,10 @@ type UploadFileBaseReq struct { } type UploadLogoReq struct { - ResourceId string `form:"resource_id"` // 资源ID - ResourceUrl string `form:"resource_url"` // 资源URL - IsRemoveBg int64 `form:"is_remove_bg,optional"` // 是否要去掉背景 - Proportion int64 `form:"proportion,default=60"` // 贴图在模型面板上的比例 - SkuId int64 `form:"sku_id,default=0"` // 模板ID + FileKey string `form:"file_key"` // 上传logo唯一标识信息 + IsRemoveBg int64 `form:"is_remove_bg,optional"` // 是否要去掉背景 + Proportion int64 `form:"proportion,default=60"` // 贴图在模型面板上的比例 + SkuId int64 `form:"sku_id,default=0"` // 模板ID } type UploadFileBackendReq struct { diff --git a/server_api/upload.api b/server_api/upload.api index a9581adf..a3c7399f 100644 --- a/server_api/upload.api +++ b/server_api/upload.api @@ -58,11 +58,10 @@ type ( type ( UploadLogoReq { - ResourceId string `form:"resource_id"` // 资源ID - ResourceUrl string `form:"resource_url"` // 资源URL - IsRemoveBg int64 `form:"is_remove_bg,optional"` // 是否要去掉背景 - Proportion int64 `form:"proportion,default=60"` // 贴图在模型面板上的比例 - SkuId int64 `form:"sku_id,default=0"` // 模板ID + FileKey string `form:"file_key"` // 上传logo唯一标识信息 + IsRemoveBg int64 `form:"is_remove_bg,optional"` // 是否要去掉背景 + Proportion int64 `form:"proportion,default=60"` // 贴图在模型面板上的比例 + SkuId int64 `form:"sku_id,default=0"` // 模板ID } ) From d101d241f43bf627b913c5df708cd0108f8b90be Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Thu, 10 Aug 2023 19:12:07 +0800 Subject: [PATCH 03/23] fix --- server/render/consumer/assemble_render_data.go | 6 ++++++ server/websocket/internal/logic/mq_consumer.go | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/server/render/consumer/assemble_render_data.go b/server/render/consumer/assemble_render_data.go index 3c7f1ffa..98184dca 100644 --- a/server/render/consumer/assemble_render_data.go +++ b/server/render/consumer/assemble_render_data.go @@ -33,6 +33,11 @@ type MqConsumerRenderAssemble struct { } func (m *MqConsumerRenderAssemble) Run(ctx context.Context, data []byte) error { + defer func() { + if err := recover(); err != nil { + logx.Error("MqConsumerRenderAssemble panic:", err) + } + }() logx.Info("收到需要组装的消息:", string(data)) var parseInfo websocket_data.AssembleRenderData if err := json.Unmarshal(data, &parseInfo); err != nil { @@ -244,6 +249,7 @@ func getCombineImage(ctx context.Context, svcCtx *svc.ServiceContext, parseInfo logx.Error("failed to parse python api rsp:", err) return "", err } + //fmt.Println("××××××××××××××××××××:", pythonApiInfo) //上传刀版图 var upload = file.Upload{ Ctx: ctx, diff --git a/server/websocket/internal/logic/mq_consumer.go b/server/websocket/internal/logic/mq_consumer.go index 7488e229..410dee3e 100644 --- a/server/websocket/internal/logic/mq_consumer.go +++ b/server/websocket/internal/logic/mq_consumer.go @@ -13,6 +13,11 @@ type MqConsumerRenderResult struct { } func (m *MqConsumerRenderResult) Run(ctx context.Context, data []byte) error { + defer func() { + if err := recover(); err != nil { + logx.Error("MqConsumerRenderResult panic:", err) + } + }() logx.Info("接收到MqConsumerRenderResult数据:", string(data)) var parseInfo websocket_data.RenderImageNotify if err := json.Unmarshal(data, &parseInfo); err != nil { From b085f3dbefd8c84479802468dedaeb4a444504c4 Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Thu, 10 Aug 2023 19:41:25 +0800 Subject: [PATCH 04/23] fix --- .../internal/logic/datatransferlogic.go | 58 ++++++++++++------- 1 file changed, 38 insertions(+), 20 deletions(-) diff --git a/server/websocket/internal/logic/datatransferlogic.go b/server/websocket/internal/logic/datatransferlogic.go index 44dc3e82..cbd1a189 100644 --- a/server/websocket/internal/logic/datatransferlogic.go +++ b/server/websocket/internal/logic/datatransferlogic.go @@ -9,6 +9,7 @@ import ( "fusenapi/utils/auth" "fusenapi/utils/id_generator" "fusenapi/utils/websocket_data" + "github.com/google/uuid" "github.com/gorilla/websocket" "net/http" "sync" @@ -60,6 +61,8 @@ var ( } //websocket连接存储 mapConnPool = sync.Map{} + //公共互斥锁 + publicMutex sync.Mutex ) // 每个连接的连接基本属性 @@ -70,7 +73,7 @@ type wsConnectItem struct { allModels *gmodel.AllModelsGen closeChan chan struct{} //ws连接关闭chan isClose bool //是否已经关闭 - uniqueId uint64 //ws连接唯一标识 + uniqueId string //ws连接唯一标识 inChan chan []byte //接受消息缓冲通道 outChan chan []byte //发送回客户端的消息 mutex sync.Mutex //互斥锁 @@ -94,7 +97,7 @@ func (l *DataTransferLogic) DataTransfer(svcCtx *svc.ServiceContext, w http.Resp ) isAuth, userInfo = l.checkAuth(svcCtx, r) if !isAuth { - time.Sleep(time.Second * 4) //兼容下火狐 + time.Sleep(time.Second * 2) //兼容下火狐 rsp := websocket_data.DataTransferData{ T: constants.WEBSOCKET_UNAUTH, D: nil, @@ -109,8 +112,32 @@ func (l *DataTransferLogic) DataTransfer(svcCtx *svc.ServiceContext, w http.Resp //测试的目前写死 39 var userInfo auth.UserInfo userInfo.UserId = 39 + ws := l.setConnPool(conn, userInfo) + defer ws.close() + go func() { + //把连接成功消息发回去 + time.Sleep(time.Second * 2) //兼容下火狐 + b := ws.respondDataFormat(constants.WEBSOCKET_CONNECT_SUCCESS, uniqueId) + _ = conn.WriteMessage(websocket.TextMessage, b) + }() + //循环读客户端信息 + go ws.readLoop() + //循环把数据发送给客户端 + go ws.writeLoop() + //推消息到云渲染 + go ws.sendLoop() + //操作连接中渲染任务的增加/删除 + go ws.operationRenderTask() + //心跳 + ws.heartbeat() +} + +// 获取唯一id +func (l *DataTransferLogic) setConnPool(conn *websocket.Conn, userInfo auth.UserInfo) wsConnectItem { + publicMutex.Lock() + defer publicMutex.Unlock() //生成连接唯一标识 - uniqueId := websocketIdGenerator.Get() + uniqueId := l.getUniqueId() ws := wsConnectItem{ conn: conn, ctx: l.ctx, @@ -129,23 +156,14 @@ func (l *DataTransferLogic) DataTransfer(svcCtx *svc.ServiceContext, w http.Resp } //保存连接 mapConnPool.Store(uniqueId, ws) - defer ws.close() - go func() { - //把连接成功消息发回去 - time.Sleep(time.Second * 4) //兼容下火狐 - b := ws.respondDataFormat(constants.WEBSOCKET_CONNECT_SUCCESS, uniqueId) - _ = conn.WriteMessage(websocket.TextMessage, b) - }() - //循环读客户端信息 - go ws.readLoop() - //循环把数据发送给客户端 - go ws.writeLoop() - //推消息到云渲染 - go ws.sendLoop() - //操作连接中渲染任务的增加/删除 - go ws.operationRenderTask() - //心跳 - ws.heartbeat() + return ws +} +func (l *DataTransferLogic) getUniqueId() string { + uniqueId := uuid.New().String() + time.Now().Format("20060102150405") + if _, ok := mapConnPool.Load(uniqueId); ok { + uniqueId = l.getUniqueId() + } + return uniqueId } // 鉴权 From df8772812aa1927bb7a180aef0b30dfb9c3c9df1 Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Thu, 10 Aug 2023 19:42:31 +0800 Subject: [PATCH 05/23] fix --- server/websocket/internal/logic/datatransferlogic.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/server/websocket/internal/logic/datatransferlogic.go b/server/websocket/internal/logic/datatransferlogic.go index cbd1a189..825ce08a 100644 --- a/server/websocket/internal/logic/datatransferlogic.go +++ b/server/websocket/internal/logic/datatransferlogic.go @@ -114,12 +114,6 @@ func (l *DataTransferLogic) DataTransfer(svcCtx *svc.ServiceContext, w http.Resp userInfo.UserId = 39 ws := l.setConnPool(conn, userInfo) defer ws.close() - go func() { - //把连接成功消息发回去 - time.Sleep(time.Second * 2) //兼容下火狐 - b := ws.respondDataFormat(constants.WEBSOCKET_CONNECT_SUCCESS, uniqueId) - _ = conn.WriteMessage(websocket.TextMessage, b) - }() //循环读客户端信息 go ws.readLoop() //循环把数据发送给客户端 @@ -156,6 +150,12 @@ func (l *DataTransferLogic) setConnPool(conn *websocket.Conn, userInfo auth.User } //保存连接 mapConnPool.Store(uniqueId, ws) + go func() { + //把连接成功消息发回去 + time.Sleep(time.Second * 2) //兼容下火狐 + b := ws.respondDataFormat(constants.WEBSOCKET_CONNECT_SUCCESS, uniqueId) + _ = conn.WriteMessage(websocket.TextMessage, b) + }() return ws } func (l *DataTransferLogic) getUniqueId() string { From b0e534de8c35f3dbd6725f0c5e19d8356c3c217e Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Fri, 11 Aug 2023 10:12:25 +0800 Subject: [PATCH 06/23] fix --- server/render/consumer/assemble_render_data.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/render/consumer/assemble_render_data.go b/server/render/consumer/assemble_render_data.go index 98184dca..5b041711 100644 --- a/server/render/consumer/assemble_render_data.go +++ b/server/render/consumer/assemble_render_data.go @@ -25,7 +25,7 @@ import ( type pythonApiRsp struct { Id string `json:"id"` //物料模板的id LogoUrl string `json:"logo_url"` //logo地址 - result string `json:"result"` //图片base64 + Result string `json:"result"` //图片base64 } // 消费渲染需要组装的数据 @@ -258,7 +258,7 @@ func getCombineImage(ctx context.Context, svcCtx *svc.ServiceContext, parseInfo } uploadRes, err := upload.UploadFileByBase64(&file.UploadBaseReq{ FileHash: combineHash, - FileData: pythonApiInfo.result, + FileData: pythonApiInfo.Result, UploadBucket: 1, ApiType: 2, UserId: parseInfo.RenderData.UserId, From 84749f4d14458ca40f2cae2d91dff9706698a7d9 Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Fri, 11 Aug 2023 10:49:29 +0800 Subject: [PATCH 07/23] fix --- constants/websocket.go | 6 +++++ .../internal/logic/datatransferlogic.go | 8 +++++- .../internal/logic/ws_resume_last_connect.go | 27 +++++++++++++++++++ 3 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 server/websocket/internal/logic/ws_resume_last_connect.go diff --git a/constants/websocket.go b/constants/websocket.go index be28eb32..ced0c947 100644 --- a/constants/websocket.go +++ b/constants/websocket.go @@ -8,6 +8,12 @@ const ( WEBSOCKET_UNAUTH = "WEBSOCKET_UNAUTH" //ws连接成功 WEBSOCKET_CONNECT_SUCCESS = "WEBSOCKET_CONNECT_SUCCESS" + //请求恢复为上次连接的标识 + WEBSOCKET_REQUEST_RESUME_LAST_CONNECT = "WEBSOCKET_REQUEST_RESUME_LAST_CONNECT" + //请求恢复为上次连接的标识错误 + WEBSOCKET_REQUEST_RESUME_LAST_CONNECT_ERR = "WEBSOCKET_REQUEST_RESUME_LAST_CONNECT_ERR" + //请求恢复为上次连接的标识成功 + WEBSOCKET_REQUEST_RESUME_LAST_CONNECT_SUCCESS = "WEBSOCKET_REQUEST_RESUME_LAST_CONNECT_SUCCESS" //渲染前数据组装 WEBSOCKET_RENDER_IMAGE_ASSEMBLE = "WEBSOCKET_RENDER_IMAGE_ASSEMBLE" //图片渲染 diff --git a/server/websocket/internal/logic/datatransferlogic.go b/server/websocket/internal/logic/datatransferlogic.go index 825ce08a..16f822aa 100644 --- a/server/websocket/internal/logic/datatransferlogic.go +++ b/server/websocket/internal/logic/datatransferlogic.go @@ -112,6 +112,7 @@ func (l *DataTransferLogic) DataTransfer(svcCtx *svc.ServiceContext, w http.Resp //测试的目前写死 39 var userInfo auth.UserInfo userInfo.UserId = 39 + //设置连接 ws := l.setConnPool(conn, userInfo) defer ws.close() //循环读客户端信息 @@ -126,7 +127,7 @@ func (l *DataTransferLogic) DataTransfer(svcCtx *svc.ServiceContext, w http.Resp ws.heartbeat() } -// 获取唯一id +// 设置连接 func (l *DataTransferLogic) setConnPool(conn *websocket.Conn, userInfo auth.UserInfo) wsConnectItem { publicMutex.Lock() defer publicMutex.Unlock() @@ -158,6 +159,8 @@ func (l *DataTransferLogic) setConnPool(conn *websocket.Conn, userInfo auth.User }() return ws } + +// 获取唯一id func (l *DataTransferLogic) getUniqueId() string { uniqueId := uuid.New().String() + time.Now().Format("20060102150405") if _, ok := mapConnPool.Load(uniqueId); ok { @@ -309,6 +312,9 @@ func (w *wsConnectItem) dealwithReciveData(data []byte) { //图片渲染 case constants.WEBSOCKET_RENDER_IMAGE: w.renderImage(d) + //刷新重连请求恢复上次连接的标识 + case constants.WEBSOCKET_REQUEST_RESUME_LAST_CONNECT: + w.resumeLateConnect(d) default: } diff --git a/server/websocket/internal/logic/ws_resume_last_connect.go b/server/websocket/internal/logic/ws_resume_last_connect.go new file mode 100644 index 00000000..39f29414 --- /dev/null +++ b/server/websocket/internal/logic/ws_resume_last_connect.go @@ -0,0 +1,27 @@ +package logic + +import "fusenapi/constants" + +// 刷新重连请求恢复上次连接的标识 +func (w *wsConnectItem) resumeLateConnect(data []byte) { + clientId := string(data) + //id长度不对 + if len(clientId) != 50 { + rsp := w.respondDataFormat(constants.WEBSOCKET_REQUEST_RESUME_LAST_CONNECT_ERR, "request id is invalid") + w.sendToOutChan(rsp) + return + } + publicMutex.Lock() + defer publicMutex.Unlock() + //存在是不能给他申请重新绑定 + if _, ok := mapConnPool.Load(clientId); ok { + rsp := w.respondDataFormat(constants.WEBSOCKET_REQUEST_RESUME_LAST_CONNECT_ERR, "id has bound by other connect ") + w.sendToOutChan(rsp) + return + } + //重新绑定 + w.uniqueId = clientId + rsp := w.respondDataFormat(constants.WEBSOCKET_REQUEST_RESUME_LAST_CONNECT_SUCCESS, clientId) + w.sendToOutChan(rsp) + return +} From 266ff9075f3d3f041d990a5ec0e0c09170171a2e Mon Sep 17 00:00:00 2001 From: Hiven Date: Fri, 11 Aug 2023 14:27:46 +0800 Subject: [PATCH 08/23] =?UTF-8?q?fix:=E6=9B=B4=E6=96=B0=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E7=8E=AF=E5=A2=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/resource/etc/resource.yaml | 3 ++- server/upload/etc/upload.yaml | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/server/resource/etc/resource.yaml b/server/resource/etc/resource.yaml index b57c5f1c..8e70bf17 100644 --- a/server/resource/etc/resource.yaml +++ b/server/resource/etc/resource.yaml @@ -16,4 +16,5 @@ AWS: Token: BLMService: LogoCombine: - Url: "http://192.168.1.7:45678/LogoCombine" \ No newline at end of file + #Url: "http://192.168.1.7:45678/LogoCombine" + Url: "http://18.119.109.254:8999/LogoCombine" \ No newline at end of file diff --git a/server/upload/etc/upload.yaml b/server/upload/etc/upload.yaml index 5a8a5cb6..3e1c96f3 100644 --- a/server/upload/etc/upload.yaml +++ b/server/upload/etc/upload.yaml @@ -15,4 +15,5 @@ AWS: Token: BLMService: ImageProcess: - Url: "http://192.168.1.7:45678/FeatureExtraction" + #Url: "http://192.168.1.7:45678/FeatureExtraction" + Url: "http://18.119.109.254:8999/FeatureExtraction" From 0edcf1e65f16b364c06d840e7303d0140960c9aa Mon Sep 17 00:00:00 2001 From: Hiven Date: Fri, 11 Aug 2023 14:38:57 +0800 Subject: [PATCH 09/23] =?UTF-8?q?fix:=E6=9B=B4=E6=96=B0=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E7=8E=AF=E5=A2=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/product-template-tag/etc/product-template-tag.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/product-template-tag/etc/product-template-tag.yaml b/server/product-template-tag/etc/product-template-tag.yaml index 253828fb..75f4d2d3 100644 --- a/server/product-template-tag/etc/product-template-tag.yaml +++ b/server/product-template-tag/etc/product-template-tag.yaml @@ -1,6 +1,6 @@ Name: product-template-tag Host: 0.0.0.0 -Port: 9916 +Port: 9917 SourceMysql: fusentest:XErSYmLELKMnf3Dh@tcp(110.41.19.98:3306)/fusentest Auth: AccessSecret: fusen2023 From dbe6e99f2d6f51f351536ab8a2e4eab201fb3fc2 Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Fri, 11 Aug 2023 14:52:16 +0800 Subject: [PATCH 10/23] fix --- model/gmodel/fs_product_template_v2_logic.go | 27 ++++ .../internal/logic/gettemplatebypidlogic.go | 125 +++++------------- server/product/internal/types/types.go | 7 +- server_api/product.api | 10 +- 4 files changed, 74 insertions(+), 95 deletions(-) diff --git a/model/gmodel/fs_product_template_v2_logic.go b/model/gmodel/fs_product_template_v2_logic.go index d760f398..c29c285d 100755 --- a/model/gmodel/fs_product_template_v2_logic.go +++ b/model/gmodel/fs_product_template_v2_logic.go @@ -139,3 +139,30 @@ func (t *FsProductTemplateV2Model) FindAllByModelIdsTemplateTag(ctx context.Cont err = db.Find(&resp).Error return resp, err } + +// 获取产品某个物料下的第一个模板 +func (t *FsProductTemplateV2Model) GetSizeLatestTemplate(ctx context.Context, ids []int64, productId int64) (resp *FsProductTemplateV2, err error) { + err = t.db.WithContext(ctx).Model(&FsProductTemplateV2{}). + Where("id in (?) and product_id = ? and status = ? and is_del = ?", ids, productId, 1, 0). + Order("sort ASC").Take(&resp).Error + return resp, err +} + +// 获取产品第一个物料下的第一个模板 +func (t *FsProductTemplateV2Model) GetProductLatestTemplate(ctx context.Context, ids []int64, productId int64) (resp *FsProductTemplateV2, err error) { + err = t.db.WithContext(ctx).Model(&FsProductTemplateV2{}). + Where("id in (?) and product_id = ? and status = ? and is_del = ?", ids, productId, 1, 0). + Order("sort ASC").Take(&resp).Error + return resp, err +} + +// 获取产品在指定模板标签下的所有模板 +func (t *FsProductTemplateV2Model) GetListByProductAndTemplateTag(ctx context.Context, templateTagId string, productId int64, fields ...string) (resp []FsProductTemplateV2, err error) { + db := t.db.WithContext(ctx).Model(&FsProductTemplateV2{}). + Where("tag = ? and product_id = ? and status = ? and is_del = ?", templateTagId, productId, 1, 0) + if len(fields) > 0 { + db = db.Select(fields[0]) + } + err = db.Find(&resp).Error + return resp, err +} diff --git a/server/product/internal/logic/gettemplatebypidlogic.go b/server/product/internal/logic/gettemplatebypidlogic.go index 18ccb887..876f6274 100644 --- a/server/product/internal/logic/gettemplatebypidlogic.go +++ b/server/product/internal/logic/gettemplatebypidlogic.go @@ -4,12 +4,10 @@ import ( "encoding/json" "errors" "fmt" - "fusenapi/constants" + "fusenapi/model/gmodel" "fusenapi/utils/auth" "fusenapi/utils/basic" - "fusenapi/utils/image" "gorm.io/gorm" - "strconv" "strings" "context" @@ -39,13 +37,11 @@ func (l *GetTemplateByPidLogic) GetTemplateByPid(req *types.GetTemplateByPidReq, if req.Pid == "" { return resp.SetStatusWithMessage(basic.CodeRequestParamsErr, "err param:pid is empty") } - if req.Size > 0 { - req.Size = image.GetCurrentSize(req.Size) - } if req.ProductTemplateTagId <= 0 { return resp.SetStatusWithMessage(basic.CodeRequestParamsErr, "err param:product_template_tag_id") } - //获取产品信息(只是获取id) + + //获取产品信息(只获取id) productInfo, err := l.svcCtx.AllModels.FsProduct.FindOneBySn(l.ctx, req.Pid, "id") if err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { @@ -54,99 +50,46 @@ func (l *GetTemplateByPidLogic) GetTemplateByPid(req *types.GetTemplateByPidReq, logx.Error(err) return resp.SetStatusWithMessage(basic.CodeDbSqlErr, "failed to get product info") } - //获取尺寸ids(只获取id) - sizeList, err := l.svcCtx.AllModels.FsProductSize.GetAllByProductIds(l.ctx, []int64{productInfo.Id}, "id") + //获取该产品该模板标签下的模板列表(只获取id) + templateList, err := l.svcCtx.AllModels.FsProductTemplateV2. + GetListByProductAndTemplateTag(l.ctx, fmt.Sprintf("%d", req.ProductTemplateTagId), productInfo.Id, "id") if err != nil { logx.Error(err) - return resp.SetStatusWithMessage(basic.CodeDbSqlErr, "failed to get size list") + return resp.SetStatusWithMessage(basic.CodeDbSqlErr, "failed to get templates") } - if len(sizeList) == 0 { - return resp.SetStatusWithMessage(basic.CodeOK, "success:size list is empty") + if len(templateList) == 0 { + return resp.SetStatusWithMessage(basic.CodeDbSqlErr, "templates are not exists") } - sizeIds := make([]int64, 0, len(sizeList)) - for _, v := range sizeList { - sizeIds = append(sizeIds, v.Id) + templateIds := make([]int64, 0, len(templateList)) + for _, v := range templateList { + templateIds = append(templateIds, v.Id) + } + var ( + templateInfo *gmodel.FsProductTemplateV2 + ) + //传了指定物料,则获取该物料的第一个模板 + if req.ProductSizeId > 0 { + templateInfo, err = l.svcCtx.AllModels.FsProductTemplateV2.GetSizeLatestTemplate(l.ctx, templateIds, productInfo.Id) + } else { //没有指定物料则获取第一个物料的第一个模板 + templateInfo, err = l.svcCtx.AllModels.FsProductTemplateV2.GetProductLatestTemplate(l.ctx, templateIds, productInfo.Id) } - //获取模型数据 - modelList, err := l.svcCtx.AllModels.FsProductModel3d.GetAllBySizeIdsTag(l.ctx, sizeIds, constants.TAG_MODEL, "id,size_id") if err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + return resp.SetStatusWithMessage(basic.CodeDbRecordNotFoundErr, "template info not found") + } logx.Error(err) - return resp.SetStatusWithMessage(basic.CodeDbSqlErr, "failed to get model list") + return resp.SetStatusWithMessage(basic.CodeDbSqlErr, "failed to get template info") } - if len(modelList) == 0 { - return resp.SetStatusWithMessage(basic.CodeOK, "success:model list is empty") + if templateInfo.TemplateInfo == nil || *templateInfo.TemplateInfo == "" { + return resp.SetStatusWithMessage(basic.CodeJsonErr, "template info is not set") } - modelIds := make([]int64, 0, len(modelList)) - mapModel := make(map[int64]int) - for k, v := range modelList { - modelIds = append(modelIds, v.Id) - mapModel[v.Id] = k - } - //获取模板数据 - productTemplateList, err := l.svcCtx.AllModels.FsProductTemplateV2.FindAllByModelIdsTemplateTag(l.ctx, modelIds, fmt.Sprintf("%d", req.ProductTemplateTagId), "sort DESC") - if err != nil { + var info interface{} + if err = json.Unmarshal([]byte(*templateInfo.TemplateInfo), &info); err != nil { logx.Error(err) - return resp.SetStatusWithMessage(basic.CodeDbSqlErr, "failed to get product templates") + return resp.SetStatusWithMessage(basic.CodeJsonErr, "failed to parse json product template info:", templateInfo.Id) } - if len(productTemplateList) == 0 { - return resp.SetStatusWithMessage(basic.CodeOK, "success:product template list is empty") - } - tagIds := make([]int64, 0, len(productTemplateList)) - for _, v := range productTemplateList { - if *v.Tag == "" { - continue - } - tag, err := strconv.ParseInt(*v.Tag, 10, 64) - if err != nil { - logx.Error(err) - return resp.SetStatusWithMessage(basic.CodeServiceErr, "template tag is not a number:"+*v.Tag) - } - tagIds = append(tagIds, tag) - } - //获取模板标签列表 - templateTagList, err := l.svcCtx.AllModels.FsProductTemplateTags.GetListByIds(l.ctx, tagIds) - if err != nil { - logx.Error(err) - return resp.SetStatusWithMessage(basic.CodeDbSqlErr, "failed to get template tag list") - } - mapTemplateTag := make(map[string]int) - for k, v := range templateTagList { - mapTemplateTag[fmt.Sprintf("%d", v.Id)] = k - } - mapRsp := make(map[string][]interface{}) - for _, v := range productTemplateList { - //过滤没有设置详细数据的模板 - if v.TemplateInfo == nil || *v.TemplateInfo == "" { - continue - } - var templateInfo map[string]interface{} - if err = json.Unmarshal([]byte(*v.TemplateInfo), &templateInfo); err != nil { - logx.Error(err) - return resp.SetStatusWithMessage(basic.CodeJsonErr, "failed to parse json:template info") - } - if templateInfo["cover"] != nil && templateInfo["cover"].(string) != "" { - cover := strings.Split(templateInfo["cover"].(string), ".") - if req.Size >= 200 && len(cover) >= 2 { - templateInfo["cover"] = fmt.Sprintf("%s_%d.%s", cover[0], req.Size, cover[1]) - } - } else { - templateInfo["cover"] = "" - } - templateInfo["tag_name"] = "" - if tagIndex, ok := mapTemplateTag[*v.Tag]; ok { - templateInfo["tag_name"] = *templateTagList[tagIndex].Title - } - templateInfo["title"] = *v.Title - modelIndex, ok := mapModel[*v.ModelId] - if !ok { - continue - } - key := fmt.Sprintf("_%d", *modelList[modelIndex].SizeId) - if _, ok = mapRsp[key]; ok { - mapRsp[key] = append(mapRsp[key], templateInfo) - } else { - mapRsp[key] = []interface{}{templateInfo} - } - } - return resp.SetStatusWithMessage(basic.CodeOK, "success", mapRsp) + return resp.SetStatusWithMessage(basic.CodeOK, "success", types.GetTemplateByPidRsp{ + TemplateId: templateInfo.Id, + TemplateInfo: info, + }) } diff --git a/server/product/internal/types/types.go b/server/product/internal/types/types.go index cf94b40b..8e718fb7 100644 --- a/server/product/internal/types/types.go +++ b/server/product/internal/types/types.go @@ -341,8 +341,13 @@ type GetSizeByPidRsp struct { type GetTemplateByPidReq struct { Pid string `form:"pid"` - Size uint32 `form:"size"` ProductTemplateTagId int64 `form:"product_template_tag_id"` + ProductSizeId int64 `form:"product_size_id,optional"` +} + +type GetTemplateByPidRsp struct { + TemplateId int64 `json:"template_id"` //模板id + TemplateInfo interface{} `json:"template_info"` //模板信息 } type GetFittingByPidReq struct { diff --git a/server_api/product.api b/server_api/product.api index b4aca200..28ca4ae7 100644 --- a/server_api/product.api +++ b/server_api/product.api @@ -50,7 +50,7 @@ service product { //获取产品尺寸列表 @handler GetSizeByPidHandler get /api/product/get_size_by_pid(GetSizeByPidReq) returns (response); - //获取产品模板列表 + //获取产品模板 @handler GetTemplateByPidHandler get /api/product/get_template_by_pid(GetTemplateByPidReq) returns (response); //获取产品配件数据 @@ -383,11 +383,15 @@ type GetSizeByPidRsp { IsPopular bool `json:"is_popular"` //是否受欢迎 MinPrice float64 `json:"min_price"` //最小价格 } -//获取产品模板列表 +//获取产品模板 type GetTemplateByPidReq { Pid string `form:"pid"` - Size uint32 `form:"size"` ProductTemplateTagId int64 `form:"product_template_tag_id"` + ProductSizeId int64 `form:"product_size_id,optional"` +} +type GetTemplateByPidRsp { + TemplateId int64 `json:"template_id"` //模板id + TemplateInfo interface{} `json:"template_info"` //模板信息 } //获取产品配件数据 type GetFittingByPidReq { From 94e15c1c19101f41c57220f334d64a09cd6daa48 Mon Sep 17 00:00:00 2001 From: Hiven Date: Fri, 11 Aug 2023 15:28:03 +0800 Subject: [PATCH 11/23] =?UTF-8?q?fix:=E6=9B=B4=E6=96=B0=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E7=8E=AF=E5=A2=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/resource/etc/resource.yaml | 4 ++-- server/resource/internal/logic/logocombinelogic.go | 11 ++++++++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/server/resource/etc/resource.yaml b/server/resource/etc/resource.yaml index 8e70bf17..cc596ed4 100644 --- a/server/resource/etc/resource.yaml +++ b/server/resource/etc/resource.yaml @@ -16,5 +16,5 @@ AWS: Token: BLMService: LogoCombine: - #Url: "http://192.168.1.7:45678/LogoCombine" - Url: "http://18.119.109.254:8999/LogoCombine" \ No newline at end of file + Url: "http://192.168.1.7:8999/LogoCombine" + #Url: "http://18.119.109.254:8999/LogoCombine" \ No newline at end of file diff --git a/server/resource/internal/logic/logocombinelogic.go b/server/resource/internal/logic/logocombinelogic.go index 71fca87d..b392a138 100644 --- a/server/resource/internal/logic/logocombinelogic.go +++ b/server/resource/internal/logic/logocombinelogic.go @@ -2,6 +2,7 @@ package logic import ( "encoding/json" + "errors" "fusenapi/model/gmodel" "fusenapi/utils/auth" "fusenapi/utils/basic" @@ -17,6 +18,7 @@ import ( "fusenapi/server/resource/internal/types" "github.com/zeromicro/go-zero/core/logx" + "gorm.io/gorm" ) type LogoCombineLogic struct { @@ -75,8 +77,10 @@ func (l *LogoCombineLogic) LogoCombine(req *types.LogoCombineReq, userinfo *auth }) } else { if err != nil { - logx.Error(err) - return resp.SetStatus(basic.CodeDbSqlErr, "LogoCombine error") + if !errors.Is(err, gorm.ErrRecordNotFound) { + logx.Error(err) + return resp.SetStatus(basic.CodeDbSqlErr, "LogoCombine error") + } } } @@ -134,8 +138,9 @@ func (l *LogoCombineLogic) LogoCombine(req *types.LogoCombineReq, userinfo *auth logx.Error(err) return resp.SetStatus(basic.CodeFileLogoCombineErr, "service read fail") } + ress := string(b) - if string(b) == "Internal Server Error" { + if ress == "Internal Server Error" { return resp.SetStatus(basic.CodeFileLogoCombineErr, "service read fail") } From a587a19dbfc146fcfe9392afeb0564a6323fe1f6 Mon Sep 17 00:00:00 2001 From: Hiven Date: Fri, 11 Aug 2023 15:30:55 +0800 Subject: [PATCH 12/23] =?UTF-8?q?fix:=E6=9B=B4=E6=96=B0=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E7=8E=AF=E5=A2=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/resource/etc/resource.yaml | 4 ++-- server/resource/internal/logic/logocombinelogic.go | 9 +++++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/server/resource/etc/resource.yaml b/server/resource/etc/resource.yaml index cc596ed4..befe8caf 100644 --- a/server/resource/etc/resource.yaml +++ b/server/resource/etc/resource.yaml @@ -16,5 +16,5 @@ AWS: Token: BLMService: LogoCombine: - Url: "http://192.168.1.7:8999/LogoCombine" - #Url: "http://18.119.109.254:8999/LogoCombine" \ No newline at end of file + #Url: "http://192.168.1.7:8999/LogoCombine" + Url: "http://18.119.109.254:8999/LogoCombine" \ No newline at end of file diff --git a/server/resource/internal/logic/logocombinelogic.go b/server/resource/internal/logic/logocombinelogic.go index b392a138..86da8d7c 100644 --- a/server/resource/internal/logic/logocombinelogic.go +++ b/server/resource/internal/logic/logocombinelogic.go @@ -6,11 +6,12 @@ import ( "fusenapi/model/gmodel" "fusenapi/utils/auth" "fusenapi/utils/basic" + "fusenapi/utils/curl" "fusenapi/utils/file" "fusenapi/utils/hash" "io" - "net/http" "strings" + "time" "context" @@ -127,7 +128,11 @@ func (l *LogoCombineLogic) LogoCombine(req *types.LogoCombineReq, userinfo *auth postMap["param_data"] = combineParam postMapB, _ := json.Marshal(postMap) - result, err := http.Post(l.svcCtx.Config.BLMService.LogoCombine.Url, "application/json", strings.NewReader(string(postMapB))) + //result, err := http.Post(l.svcCtx.Config.BLMService.LogoCombine.Url, "application/json", strings.NewReader(string(postMapB))) + var headerData = make(map[string]string, 1) + headerData["Content-Type"] = "application/json" + result, err := curl.ApiCall(l.svcCtx.Config.BLMService.LogoCombine.Url, "POST", headerData, strings.NewReader(string(postMapB)), time.Second*20) + if err != nil { logx.Error(err) return resp.SetStatus(basic.CodeFileLogoCombineErr, "service post fail") From 9b0a18fcd8077c05c98418dc1a47ef5b29692b78 Mon Sep 17 00:00:00 2001 From: Hiven Date: Fri, 11 Aug 2023 17:22:14 +0800 Subject: [PATCH 13/23] =?UTF-8?q?fix:=E6=9B=B4=E6=96=B0=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E7=8E=AF=E5=A2=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/upload/internal/logic/uploadlogologic.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/server/upload/internal/logic/uploadlogologic.go b/server/upload/internal/logic/uploadlogologic.go index ea98bf45..88744393 100644 --- a/server/upload/internal/logic/uploadlogologic.go +++ b/server/upload/internal/logic/uploadlogologic.go @@ -168,5 +168,12 @@ func (l *UploadLogoLogic) UploadLogo(req *types.UploadLogoReq, userinfo *auth.Us return resp.SetStatus(basic.CodeFileUploadLogoErr, "service fail") } - return resp.SetStatus(basic.CodeOK) + // 返回成功的响应和上传URL + return resp.SetStatus(basic.CodeOK, map[string]interface{}{ + "upload_data": UploadUrl{ + Status: 1, + ResourceId: uploadRes.ResourceId, + ResourceUrl: uploadRes.ResourceUrl, + }, + }) } From 48afd3105f5778c9524f2791c352a8a934be015d Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Fri, 11 Aug 2023 18:59:03 +0800 Subject: [PATCH 14/23] fix --- model/gmodel/fs_product_model3d_logic.go | 11 +++ model/gmodel/fs_product_template_v2_gen.go | 1 + model/gmodel/fs_product_template_v2_logic.go | 16 ---- .../internal/logic/gettemplatebypidlogic.go | 91 +++++++++++-------- server_api/product.api | 5 - 5 files changed, 65 insertions(+), 59 deletions(-) diff --git a/model/gmodel/fs_product_model3d_logic.go b/model/gmodel/fs_product_model3d_logic.go index 9cb2fe91..741fdac2 100755 --- a/model/gmodel/fs_product_model3d_logic.go +++ b/model/gmodel/fs_product_model3d_logic.go @@ -101,3 +101,14 @@ func (d *FsProductModel3dModel) FindOneJoinSize(ctx context.Context, productId i Order("s.sort ASC").Take(&resp).Error return resp, err } + +func (d *FsProductModel3dModel) GetOneBySizeIdTag(ctx context.Context, sizeId int64, tag int64, fields ...string) (resp *FsProductModel3d, err error) { + db := d.db.WithContext(ctx).Model(&FsProductModel3d{}). + Where("`size_id` = ? and `tag` = ? and `status` = ?", sizeId, tag, 1). + Order("sort DESC") + if len(fields) != 0 { + db = db.Select(fields[0]) + } + err = db.Take(&resp).Error + return resp, err +} diff --git a/model/gmodel/fs_product_template_v2_gen.go b/model/gmodel/fs_product_template_v2_gen.go index 5e14427f..d72b388a 100644 --- a/model/gmodel/fs_product_template_v2_gen.go +++ b/model/gmodel/fs_product_template_v2_gen.go @@ -22,6 +22,7 @@ type FsProductTemplateV2 struct { Ctime *int64 `gorm:"default:0;" json:"ctime"` // 添加时间 Tag *string `gorm:"default:'';" json:"tag"` // 标签(用户自填) IsDel *int64 `gorm:"default:0;" json:"is_del"` // 是否删除 1删除 + SwitchInfo *string `gorm:"default:'';" json:"switch_info"` // 开关信息 GroupOptions *string `gorm:"default:'';" json:"group_options"` // 颜色分组 Version *int64 `gorm:"default:0;" json:"version"` // } diff --git a/model/gmodel/fs_product_template_v2_logic.go b/model/gmodel/fs_product_template_v2_logic.go index c29c285d..57109ca8 100755 --- a/model/gmodel/fs_product_template_v2_logic.go +++ b/model/gmodel/fs_product_template_v2_logic.go @@ -140,22 +140,6 @@ func (t *FsProductTemplateV2Model) FindAllByModelIdsTemplateTag(ctx context.Cont return resp, err } -// 获取产品某个物料下的第一个模板 -func (t *FsProductTemplateV2Model) GetSizeLatestTemplate(ctx context.Context, ids []int64, productId int64) (resp *FsProductTemplateV2, err error) { - err = t.db.WithContext(ctx).Model(&FsProductTemplateV2{}). - Where("id in (?) and product_id = ? and status = ? and is_del = ?", ids, productId, 1, 0). - Order("sort ASC").Take(&resp).Error - return resp, err -} - -// 获取产品第一个物料下的第一个模板 -func (t *FsProductTemplateV2Model) GetProductLatestTemplate(ctx context.Context, ids []int64, productId int64) (resp *FsProductTemplateV2, err error) { - err = t.db.WithContext(ctx).Model(&FsProductTemplateV2{}). - Where("id in (?) and product_id = ? and status = ? and is_del = ?", ids, productId, 1, 0). - Order("sort ASC").Take(&resp).Error - return resp, err -} - // 获取产品在指定模板标签下的所有模板 func (t *FsProductTemplateV2Model) GetListByProductAndTemplateTag(ctx context.Context, templateTagId string, productId int64, fields ...string) (resp []FsProductTemplateV2, err error) { db := t.db.WithContext(ctx).Model(&FsProductTemplateV2{}). diff --git a/server/product/internal/logic/gettemplatebypidlogic.go b/server/product/internal/logic/gettemplatebypidlogic.go index 876f6274..51432f3d 100644 --- a/server/product/internal/logic/gettemplatebypidlogic.go +++ b/server/product/internal/logic/gettemplatebypidlogic.go @@ -4,7 +4,7 @@ import ( "encoding/json" "errors" "fmt" - "fusenapi/model/gmodel" + "fusenapi/constants" "fusenapi/utils/auth" "fusenapi/utils/basic" "gorm.io/gorm" @@ -40,7 +40,6 @@ func (l *GetTemplateByPidLogic) GetTemplateByPid(req *types.GetTemplateByPidReq, if req.ProductTemplateTagId <= 0 { return resp.SetStatusWithMessage(basic.CodeRequestParamsErr, "err param:product_template_tag_id") } - //获取产品信息(只获取id) productInfo, err := l.svcCtx.AllModels.FsProduct.FindOneBySn(l.ctx, req.Pid, "id") if err != nil { @@ -50,46 +49,62 @@ func (l *GetTemplateByPidLogic) GetTemplateByPid(req *types.GetTemplateByPidReq, logx.Error(err) return resp.SetStatusWithMessage(basic.CodeDbSqlErr, "failed to get product info") } - //获取该产品该模板标签下的模板列表(只获取id) - templateList, err := l.svcCtx.AllModels.FsProductTemplateV2. - GetListByProductAndTemplateTag(l.ctx, fmt.Sprintf("%d", req.ProductTemplateTagId), productInfo.Id, "id") - if err != nil { - logx.Error(err) - return resp.SetStatusWithMessage(basic.CodeDbSqlErr, "failed to get templates") - } - if len(templateList) == 0 { - return resp.SetStatusWithMessage(basic.CodeDbSqlErr, "templates are not exists") - } - templateIds := make([]int64, 0, len(templateList)) - for _, v := range templateList { - templateIds = append(templateIds, v.Id) - } - var ( - templateInfo *gmodel.FsProductTemplateV2 - ) - //传了指定物料,则获取该物料的第一个模板 - if req.ProductSizeId > 0 { - templateInfo, err = l.svcCtx.AllModels.FsProductTemplateV2.GetSizeLatestTemplate(l.ctx, templateIds, productInfo.Id) - } else { //没有指定物料则获取第一个物料的第一个模板 - templateInfo, err = l.svcCtx.AllModels.FsProductTemplateV2.GetProductLatestTemplate(l.ctx, templateIds, productInfo.Id) - } - if err != nil { - if errors.Is(err, gorm.ErrRecordNotFound) { - return resp.SetStatusWithMessage(basic.CodeDbRecordNotFoundErr, "template info not found") + //没有指定物料 + sizeIds := make([]int64, 0, 10) + if req.ProductSizeId <= 0 { + //获取产品所有物料 + sizeList, err := l.svcCtx.AllModels.FsProductSize.GetAllByProductIds(l.ctx, []int64{productInfo.Id}, "id") + if err != nil { + logx.Error(err) + return resp.SetStatusWithMessage(basic.CodeDbRecordNotFoundErr, "failed to get product size list") } + if len(sizeList) == 0 { + return resp.SetStatusWithMessage(basic.CodeDbRecordNotFoundErr, "product size list is empty") + } + for _, v := range sizeList { + sizeIds = append(sizeIds, v.Id) + } + } else { //指定物料 + sizeIds = append(sizeIds, req.ProductSizeId) + } + //根据尺寸id获取模型id + modelList, err := l.svcCtx.AllModels.FsProductModel3d.GetAllBySizeIdsTag(l.ctx, sizeIds, constants.TAG_MODEL, "id") + if err != nil { logx.Error(err) - return resp.SetStatusWithMessage(basic.CodeDbSqlErr, "failed to get template info") + return resp.SetStatusWithMessage(basic.CodeDbSqlErr, "failed to get model list") } - if templateInfo.TemplateInfo == nil || *templateInfo.TemplateInfo == "" { - return resp.SetStatusWithMessage(basic.CodeJsonErr, "template info is not set") + if len(modelList) == 0 { + return resp.SetStatusWithMessage(basic.CodeDbSqlErr, "model list is empty") } - var info interface{} - if err = json.Unmarshal([]byte(*templateInfo.TemplateInfo), &info); err != nil { + modelIds := make([]int64, 0, len(modelList)) + for _, v := range modelList { + modelIds = append(modelIds, v.Id) + } + //查询模型ids下对应tag标签的模板 + templateList, err := l.svcCtx.AllModels.FsProductTemplateV2.FindAllByModelIdsTemplateTag(l.ctx, modelIds, fmt.Sprintf("%d", req.ProductTemplateTagId), "") + if err != nil { logx.Error(err) - return resp.SetStatusWithMessage(basic.CodeJsonErr, "failed to parse json product template info:", templateInfo.Id) + return resp.SetStatusWithMessage(basic.CodeDbSqlErr, "failed to get template list") } - return resp.SetStatusWithMessage(basic.CodeOK, "success", types.GetTemplateByPidRsp{ - TemplateId: templateInfo.Id, - TemplateInfo: info, - }) + rspList := make([]interface{}, 0, len(templateList)) + for _, templateInfo := range templateList { + //没有设置模板据不要 + if templateInfo.TemplateInfo == nil || *templateInfo.TemplateInfo == "" { + continue + } + //基础模板信息 + var info interface{} + if err = json.Unmarshal([]byte(*templateInfo.TemplateInfo), &info); err != nil { + logx.Error(err) + return resp.SetStatusWithMessage(basic.CodeJsonErr, "failed to parse json product template info:", templateInfo.Id) + } + //后台隐藏/显示信息 + var switchInfo interface{} + if templateInfo.SwitchInfo != nil && *templateInfo.SwitchInfo != "" { + _ = json.Unmarshal([]byte(*templateInfo.SwitchInfo), &switchInfo) + } + // todo 继续下周 + rspList = append(rspList, map[string]interface{}{}) + } + return nil } diff --git a/server_api/product.api b/server_api/product.api index 28ca4ae7..e710a978 100644 --- a/server_api/product.api +++ b/server_api/product.api @@ -387,11 +387,6 @@ type GetSizeByPidRsp { type GetTemplateByPidReq { Pid string `form:"pid"` ProductTemplateTagId int64 `form:"product_template_tag_id"` - ProductSizeId int64 `form:"product_size_id,optional"` -} -type GetTemplateByPidRsp { - TemplateId int64 `json:"template_id"` //模板id - TemplateInfo interface{} `json:"template_info"` //模板信息 } //获取产品配件数据 type GetFittingByPidReq { From 538d9ff4cf35c91f53f387bee0a6297d545103ef Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Mon, 14 Aug 2023 10:51:39 +0800 Subject: [PATCH 15/23] fix --- .../internal/logic/gettemplatebypidlogic.go | 33 ++++++++++++++----- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/server/product/internal/logic/gettemplatebypidlogic.go b/server/product/internal/logic/gettemplatebypidlogic.go index 51432f3d..e036fa15 100644 --- a/server/product/internal/logic/gettemplatebypidlogic.go +++ b/server/product/internal/logic/gettemplatebypidlogic.go @@ -67,8 +67,8 @@ func (l *GetTemplateByPidLogic) GetTemplateByPid(req *types.GetTemplateByPidReq, } else { //指定物料 sizeIds = append(sizeIds, req.ProductSizeId) } - //根据尺寸id获取模型id - modelList, err := l.svcCtx.AllModels.FsProductModel3d.GetAllBySizeIdsTag(l.ctx, sizeIds, constants.TAG_MODEL, "id") + //根据尺寸id获取模型 + modelList, err := l.svcCtx.AllModels.FsProductModel3d.GetAllBySizeIdsTag(l.ctx, sizeIds, constants.TAG_MODEL) if err != nil { logx.Error(err) return resp.SetStatusWithMessage(basic.CodeDbSqlErr, "failed to get model list") @@ -77,8 +77,10 @@ func (l *GetTemplateByPidLogic) GetTemplateByPid(req *types.GetTemplateByPidReq, return resp.SetStatusWithMessage(basic.CodeDbSqlErr, "model list is empty") } modelIds := make([]int64, 0, len(modelList)) - for _, v := range modelList { + mapModel := make(map[int64]int) + for k, v := range modelList { modelIds = append(modelIds, v.Id) + mapModel[v.Id] = k } //查询模型ids下对应tag标签的模板 templateList, err := l.svcCtx.AllModels.FsProductTemplateV2.FindAllByModelIdsTemplateTag(l.ctx, modelIds, fmt.Sprintf("%d", req.ProductTemplateTagId), "") @@ -86,25 +88,38 @@ func (l *GetTemplateByPidLogic) GetTemplateByPid(req *types.GetTemplateByPidReq, logx.Error(err) return resp.SetStatusWithMessage(basic.CodeDbSqlErr, "failed to get template list") } - rspList := make([]interface{}, 0, len(templateList)) + rsp := make(map[string][]interface{}) for _, templateInfo := range templateList { //没有设置模板据不要 if templateInfo.TemplateInfo == nil || *templateInfo.TemplateInfo == "" { continue } + modelIndex, ok := mapModel[*templateInfo.ModelId] + if !ok { + continue + } //基础模板信息 - var info interface{} + var info map[string]map[string]interface{} if err = json.Unmarshal([]byte(*templateInfo.TemplateInfo), &info); err != nil { logx.Error(err) - return resp.SetStatusWithMessage(basic.CodeJsonErr, "failed to parse json product template info:", templateInfo.Id) + return resp.SetStatusWithMessage(basic.CodeJsonErr, fmt.Sprintf("failed to parse json product template info(may be old data):%d", templateInfo.Id)) } //后台隐藏/显示信息 var switchInfo interface{} if templateInfo.SwitchInfo != nil && *templateInfo.SwitchInfo != "" { _ = json.Unmarshal([]byte(*templateInfo.SwitchInfo), &switchInfo) } - // todo 继续下周 - rspList = append(rspList, map[string]interface{}{}) + modelInfo := modelList[modelIndex] + var material interface{} + if info["module_data"] != nil && info["module_data"]["material"] != nil { + material = info["module_data"]["material"] + } + mapKey := fmt.Sprintf("_%d", *modelInfo.SizeId) + rsp[mapKey] = append(rsp[mapKey], map[string]interface{}{ + "id": templateInfo.Id, + "material": material, + "material_data": switchInfo, + }) } - return nil + return resp.SetStatusWithMessage(basic.CodeOK, "success", rsp) } From cfc7b2209069a021500f72b71a264ff49c7ceec7 Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Mon, 14 Aug 2023 11:04:25 +0800 Subject: [PATCH 16/23] fix --- model/gmodel/fs_merchant_category_gen.go | 25 +++++++++++++++++++ model/gmodel/fs_merchant_category_logic.go | 2 ++ model/gmodel/fs_product_recommend_gen.go | 9 ++++--- model/gmodel/fs_product_recommend_logic.go | 10 +++++--- model/gmodel/fs_product_template_v2_gen.go | 16 ++++++------ model/gmodel/var_gen.go | 2 ++ .../homepagerecommendproductlistlogic.go | 7 +++--- server/product/internal/types/types.go | 9 ++----- server_api/product.api | 3 ++- 9 files changed, 57 insertions(+), 26 deletions(-) create mode 100644 model/gmodel/fs_merchant_category_gen.go create mode 100644 model/gmodel/fs_merchant_category_logic.go diff --git a/model/gmodel/fs_merchant_category_gen.go b/model/gmodel/fs_merchant_category_gen.go new file mode 100644 index 00000000..732ec88b --- /dev/null +++ b/model/gmodel/fs_merchant_category_gen.go @@ -0,0 +1,25 @@ +package gmodel + +import ( + "gorm.io/gorm" +) + +// fs_merchant_category 商户类型表 +type FsMerchantCategory struct { + Id int64 `gorm:"primary_key;default:0;auto_increment;" json:"id"` // Id + ZnName *string `gorm:"default:'';" json:"zn_name"` // 中文名 + EnName *string `gorm:"default:'';" json:"en_name"` // 英文名 + Icon *string `gorm:"default:'';" json:"icon"` // 图标 + RecommendProduct *string `gorm:"default:'';" json:"recommend_product"` // 推荐商品 + Sort *int64 `gorm:"default:0;" json:"sort"` // 排序 + Status *int64 `gorm:"default:0;" json:"status"` // 状态 + Ctime *int64 `gorm:"default:0;" json:"ctime"` // 添加时间 +} +type FsMerchantCategoryModel struct { + db *gorm.DB + name string +} + +func NewFsMerchantCategoryModel(db *gorm.DB) *FsMerchantCategoryModel { + return &FsMerchantCategoryModel{db: db, name: "fs_merchant_category"} +} diff --git a/model/gmodel/fs_merchant_category_logic.go b/model/gmodel/fs_merchant_category_logic.go new file mode 100644 index 00000000..e68225aa --- /dev/null +++ b/model/gmodel/fs_merchant_category_logic.go @@ -0,0 +1,2 @@ +package gmodel +// TODO: 使用model的属性做你想做的 \ No newline at end of file diff --git a/model/gmodel/fs_product_recommend_gen.go b/model/gmodel/fs_product_recommend_gen.go index 930a3da8..111494f6 100644 --- a/model/gmodel/fs_product_recommend_gen.go +++ b/model/gmodel/fs_product_recommend_gen.go @@ -6,10 +6,11 @@ import ( // fs_product_recommend 推荐商品表 type FsProductRecommend struct { - Id int64 `gorm:"primary_key;default:0;auto_increment;" json:"id"` // - ProductId *int64 `gorm:"default:0;" json:"product_id"` // 产品ID - Status *int64 `gorm:"default:1;" json:"status"` // 状态 1正常 0不正常 - Ctime *int64 `gorm:"default:0;" json:"ctime"` // 添加时间 + Id int64 `gorm:"primary_key;default:0;auto_increment;" json:"id"` // + ProductId *int64 `gorm:"default:0;" json:"product_id"` // 产品ID + MerchantType *int64 `gorm:"default:0;" json:"merchant_type"` // 商家类型 + Status *int64 `gorm:"default:1;" json:"status"` // 状态 1正常 0不正常 + Ctime *int64 `gorm:"default:0;" json:"ctime"` // 添加时间 } type FsProductRecommendModel struct { db *gorm.DB diff --git a/model/gmodel/fs_product_recommend_logic.go b/model/gmodel/fs_product_recommend_logic.go index 02e33584..0646203d 100644 --- a/model/gmodel/fs_product_recommend_logic.go +++ b/model/gmodel/fs_product_recommend_logic.go @@ -7,9 +7,10 @@ import ( ) type GetRecommendProductListReq struct { - Ctx context.Context - Page int - Limit int + Ctx context.Context + MerchantType int64 + Page int + Limit int } func (r *FsProductRecommendModel) GetRecommendProductList(req GetRecommendProductListReq) (resp []FsProduct, total int64, err error) { @@ -18,6 +19,9 @@ func (r *FsProductRecommendModel) GetRecommendProductList(req GetRecommendProduc Joins("inner join fs_product as p on r.product_id = p.id"). Where("r.status = ? ", 1). Where("p.is_shelf = ? and p.is_del = ? and p.status = ?", 1, 0, 1) + if req.MerchantType > 0 { + db = db.Where("merchant_type = ?", req.MerchantType) + } if err = db.Limit(1).Count(&total).Error; err != nil { return nil, 0, err } diff --git a/model/gmodel/fs_product_template_v2_gen.go b/model/gmodel/fs_product_template_v2_gen.go index d72b388a..07ad37fc 100644 --- a/model/gmodel/fs_product_template_v2_gen.go +++ b/model/gmodel/fs_product_template_v2_gen.go @@ -9,21 +9,21 @@ type FsProductTemplateV2 struct { Id int64 `gorm:"primary_key;default:0;auto_increment;" json:"id"` // ProductId *int64 `gorm:"index;default:0;" json:"product_id"` // 产品ID ModelId *int64 `gorm:"default:0;" json:"model_id"` // 模型ID - Title *string `gorm:"default:'';" json:"title"` // 模板(sku),预留字段 - Name *string `gorm:"default:'';" json:"name"` // 名称 - CoverImg *string `gorm:"default:'';" json:"cover_img"` // 模板背景图 - TemplateInfo *string `gorm:"default:'';" json:"template_info"` // 模板详情 - MaterialImg *string `gorm:"default:'';" json:"material_img"` // 合成好的贴图 + Title *string `gorm:"default:'';" json:"title"` // + Name *string `gorm:"default:'';" json:"name"` // + CoverImg *string `gorm:"default:'';" json:"cover_img"` // + TemplateInfo *string `gorm:"default:'';" json:"template_info"` // + MaterialImg *string `gorm:"default:'';" json:"material_img"` // Sort *int64 `gorm:"default:0;" json:"sort"` // 排序 LogoWidth *int64 `gorm:"default:0;" json:"logo_width"` // logo图最大宽度 LogoHeight *int64 `gorm:"default:0;" json:"logo_height"` // logo图最大高度 IsPublic *int64 `gorm:"default:0;" json:"is_public"` // 是否可公用(1:可以,0:不可以) Status *int64 `gorm:"default:0;" json:"status"` // 状态1正常 2异常 Ctime *int64 `gorm:"default:0;" json:"ctime"` // 添加时间 - Tag *string `gorm:"default:'';" json:"tag"` // 标签(用户自填) + Tag *string `gorm:"default:'';" json:"tag"` // IsDel *int64 `gorm:"default:0;" json:"is_del"` // 是否删除 1删除 - SwitchInfo *string `gorm:"default:'';" json:"switch_info"` // 开关信息 - GroupOptions *string `gorm:"default:'';" json:"group_options"` // 颜色分组 + SwitchInfo *string `gorm:"default:'';" json:"switch_info"` // + GroupOptions *string `gorm:"default:'';" json:"group_options"` // Version *int64 `gorm:"default:0;" json:"version"` // } type FsProductTemplateV2Model struct { diff --git a/model/gmodel/var_gen.go b/model/gmodel/var_gen.go index 46818f31..905e8301 100644 --- a/model/gmodel/var_gen.go +++ b/model/gmodel/var_gen.go @@ -45,6 +45,7 @@ type AllModelsGen struct { FsLog *FsLogModel // fs_log 日志表 FsMapLibrary *FsMapLibraryModel // fs_map_library 贴图库 FsMenu *FsMenuModel // fs_menu 后台菜单 + FsMerchantCategory *FsMerchantCategoryModel // fs_merchant_category 商户类型表 FsMigration *FsMigrationModel // fs_migration 版本库 FsOrder *FsOrderModel // fs_order FsOrderAffiliate *FsOrderAffiliateModel // fs_order_affiliate 订单附属表-流程控制时间等 @@ -140,6 +141,7 @@ func NewAllModels(gdb *gorm.DB) *AllModelsGen { FsLog: NewFsLogModel(gdb), FsMapLibrary: NewFsMapLibraryModel(gdb), FsMenu: NewFsMenuModel(gdb), + FsMerchantCategory: NewFsMerchantCategoryModel(gdb), FsMigration: NewFsMigrationModel(gdb), FsOrder: NewFsOrderModel(gdb), FsOrderAffiliate: NewFsOrderAffiliateModel(gdb), diff --git a/server/product/internal/logic/homepagerecommendproductlistlogic.go b/server/product/internal/logic/homepagerecommendproductlistlogic.go index b41c7dd0..e542aec4 100644 --- a/server/product/internal/logic/homepagerecommendproductlistlogic.go +++ b/server/product/internal/logic/homepagerecommendproductlistlogic.go @@ -54,9 +54,10 @@ func (l *HomePageRecommendProductListLogic) HomePageRecommendProductList(req *ty ) //获取列表推荐产品 recommendProductList, _, err = l.svcCtx.AllModels.FsProductRecommend.GetRecommendProductList(gmodel.GetRecommendProductListReq{ - Ctx: l.ctx, - Page: 1, - Limit: 500, //设置最大500 + Ctx: l.ctx, + MerchantType: req.MerchantType, + Page: 1, + Limit: 500, //设置最大500 }) if len(recommendProductList) == 0 { return resp.SetStatusWithMessage(basic.CodeOK, "success", []interface{}{}) diff --git a/server/product/internal/types/types.go b/server/product/internal/types/types.go index 8e718fb7..5cb5c2d4 100644 --- a/server/product/internal/types/types.go +++ b/server/product/internal/types/types.go @@ -342,12 +342,6 @@ type GetSizeByPidRsp struct { type GetTemplateByPidReq struct { Pid string `form:"pid"` ProductTemplateTagId int64 `form:"product_template_tag_id"` - ProductSizeId int64 `form:"product_size_id,optional"` -} - -type GetTemplateByPidRsp struct { - TemplateId int64 `json:"template_id"` //模板id - TemplateInfo interface{} `json:"template_info"` //模板信息 } type GetFittingByPidReq struct { @@ -395,7 +389,8 @@ type GetLastProductDesignRsp struct { } type HomePageRecommendProductListReq struct { - Size uint32 `form:"size"` + Size uint32 `form:"size"` + MerchantType int64 `form:"merchant_type"` } type HomePageRecommendProductListRsp struct { diff --git a/server_api/product.api b/server_api/product.api index e710a978..1f37a789 100644 --- a/server_api/product.api +++ b/server_api/product.api @@ -432,7 +432,8 @@ type GetLastProductDesignRsp { } //获取列表页推荐产品(返回是这个维度数组) type HomePageRecommendProductListReq { - Size uint32 `form:"size"` + Size uint32 `form:"size"` + MerchantType int64 `form:"merchant_type"` } type HomePageRecommendProductListRsp { Id int64 `json:"id"` From 2bb1c73e4a29c1a75a5070e572861a456101aa0f Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Mon, 14 Aug 2023 11:35:23 +0800 Subject: [PATCH 17/23] fix --- model/gmodel/fs_merchant_category_gen.go | 2 +- model/gmodel/fs_merchant_category_logic.go | 13 +++++- model/gmodel/fs_product_recommend_gen.go | 22 ---------- model/gmodel/fs_product_recommend_logic.go | 43 ------------------- model/gmodel/var_gen.go | 2 - .../homepagerecommendproductlistlogic.go | 34 ++++++++++++--- server/product/internal/types/types.go | 1 + server_api/product.api | 1 + 8 files changed, 43 insertions(+), 75 deletions(-) delete mode 100644 model/gmodel/fs_product_recommend_gen.go delete mode 100644 model/gmodel/fs_product_recommend_logic.go diff --git a/model/gmodel/fs_merchant_category_gen.go b/model/gmodel/fs_merchant_category_gen.go index 732ec88b..37944dce 100644 --- a/model/gmodel/fs_merchant_category_gen.go +++ b/model/gmodel/fs_merchant_category_gen.go @@ -11,7 +11,7 @@ type FsMerchantCategory struct { EnName *string `gorm:"default:'';" json:"en_name"` // 英文名 Icon *string `gorm:"default:'';" json:"icon"` // 图标 RecommendProduct *string `gorm:"default:'';" json:"recommend_product"` // 推荐商品 - Sort *int64 `gorm:"default:0;" json:"sort"` // 排序 + Sort *int64 `gorm:"default:128;" json:"sort"` // 排序 Status *int64 `gorm:"default:0;" json:"status"` // 状态 Ctime *int64 `gorm:"default:0;" json:"ctime"` // 添加时间 } diff --git a/model/gmodel/fs_merchant_category_logic.go b/model/gmodel/fs_merchant_category_logic.go index e68225aa..66b709d5 100644 --- a/model/gmodel/fs_merchant_category_logic.go +++ b/model/gmodel/fs_merchant_category_logic.go @@ -1,2 +1,13 @@ package gmodel -// TODO: 使用model的属性做你想做的 \ No newline at end of file + +import "context" + +// TODO: 使用model的属性做你想做的 +func (m *FsMerchantCategoryModel) FindOne(ctx context.Context, id int64) (resp *FsMerchantCategory, err error) { + err = m.db.WithContext(ctx).Model(&FsMerchantCategory{}).Where("id = ? and status = ?", id, 1).Take(&resp).Error + return resp, err +} +func (m *FsMerchantCategoryModel) FindRandOne(ctx context.Context) (resp *FsMerchantCategory, err error) { + err = m.db.WithContext(ctx).Model(&FsMerchantCategory{}).Where("status = ?", 1).Order("RAND()").Take(&resp).Error + return resp, err +} diff --git a/model/gmodel/fs_product_recommend_gen.go b/model/gmodel/fs_product_recommend_gen.go deleted file mode 100644 index 111494f6..00000000 --- a/model/gmodel/fs_product_recommend_gen.go +++ /dev/null @@ -1,22 +0,0 @@ -package gmodel - -import ( - "gorm.io/gorm" -) - -// fs_product_recommend 推荐商品表 -type FsProductRecommend struct { - Id int64 `gorm:"primary_key;default:0;auto_increment;" json:"id"` // - ProductId *int64 `gorm:"default:0;" json:"product_id"` // 产品ID - MerchantType *int64 `gorm:"default:0;" json:"merchant_type"` // 商家类型 - Status *int64 `gorm:"default:1;" json:"status"` // 状态 1正常 0不正常 - Ctime *int64 `gorm:"default:0;" json:"ctime"` // 添加时间 -} -type FsProductRecommendModel struct { - db *gorm.DB - name string -} - -func NewFsProductRecommendModel(db *gorm.DB) *FsProductRecommendModel { - return &FsProductRecommendModel{db: db, name: "fs_product_recommend"} -} diff --git a/model/gmodel/fs_product_recommend_logic.go b/model/gmodel/fs_product_recommend_logic.go deleted file mode 100644 index 0646203d..00000000 --- a/model/gmodel/fs_product_recommend_logic.go +++ /dev/null @@ -1,43 +0,0 @@ -package gmodel - -import ( - "context" - "errors" - "gorm.io/gorm" -) - -type GetRecommendProductListReq struct { - Ctx context.Context - MerchantType int64 - Page int - Limit int -} - -func (r *FsProductRecommendModel) GetRecommendProductList(req GetRecommendProductListReq) (resp []FsProduct, total int64, err error) { - db := r.db.WithContext(req.Ctx). - Table("fs_product_recommend as r"). - Joins("inner join fs_product as p on r.product_id = p.id"). - Where("r.status = ? ", 1). - Where("p.is_shelf = ? and p.is_del = ? and p.status = ?", 1, 0, 1) - if req.MerchantType > 0 { - db = db.Where("merchant_type = ?", req.MerchantType) - } - if err = db.Limit(1).Count(&total).Error; err != nil { - return nil, 0, err - } - db = db.Select("p.*") - offset := (req.Page - 1) * req.Limit - err = db.Offset(offset).Limit(req.Limit).Find(&resp).Error - return resp, total, err -} -func (r *FsProductRecommendModel) CreateOrUpdate(ctx context.Context, productId int64, data *FsProductRecommend) error { - var info FsProductRecommend - err := r.db.WithContext(ctx).Model(&FsProductRecommend{}).Where("`product_id` = ?", productId).Take(&info).Error - if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { - return err - } - if info.Id == 0 { - return r.db.WithContext(ctx).Model(&FsProductRecommend{}).Create(data).Error - } - return r.db.WithContext(ctx).Model(&FsProductRecommend{}).Where("`product_id` = ?", productId).Updates(data).Error -} diff --git a/model/gmodel/var_gen.go b/model/gmodel/var_gen.go index 905e8301..b62e2377 100644 --- a/model/gmodel/var_gen.go +++ b/model/gmodel/var_gen.go @@ -62,7 +62,6 @@ type AllModelsGen struct { FsProductModel3dLight *FsProductModel3dLightModel // fs_product_model3d_light 模型-灯光组表 FsProductOption *FsProductOptionModel // fs_product_option 产品选项表(已废弃) FsProductPrice *FsProductPriceModel // fs_product_price 阶梯价格表 - FsProductRecommend *FsProductRecommendModel // fs_product_recommend 推荐商品表 FsProductRenderDesign *FsProductRenderDesignModel // fs_product_render_design FsProductScene *FsProductSceneModel // fs_product_scene 产品场景表 FsProductSize *FsProductSizeModel // fs_product_size 产品尺寸表 @@ -158,7 +157,6 @@ func NewAllModels(gdb *gorm.DB) *AllModelsGen { FsProductModel3dLight: NewFsProductModel3dLightModel(gdb), FsProductOption: NewFsProductOptionModel(gdb), FsProductPrice: NewFsProductPriceModel(gdb), - FsProductRecommend: NewFsProductRecommendModel(gdb), FsProductRenderDesign: NewFsProductRenderDesignModel(gdb), FsProductScene: NewFsProductSceneModel(gdb), FsProductSize: NewFsProductSizeModel(gdb), diff --git a/server/product/internal/logic/homepagerecommendproductlistlogic.go b/server/product/internal/logic/homepagerecommendproductlistlogic.go index e542aec4..61708dfa 100644 --- a/server/product/internal/logic/homepagerecommendproductlistlogic.go +++ b/server/product/internal/logic/homepagerecommendproductlistlogic.go @@ -42,6 +42,7 @@ func (l *HomePageRecommendProductListLogic) HomePageRecommendProductList(req *ty return resp.SetStatusWithMessage(basic.CodeServiceErr, "get user info err") } var ( + merchantInfo *gmodel.FsMerchantCategory recommendProductList []gmodel.FsProduct //产品列表(select 字段需要看查询的地方) productOptionalPartList []gmodel.GetGroupPartListByProductIdsRsp //产品配件列表 mapProductHaveOptionFitting = make(map[int64]struct{}) @@ -52,13 +53,34 @@ func (l *HomePageRecommendProductListLogic) HomePageRecommendProductList(req *ty mapProductSizeCount = make(map[int64]int64) //产品尺寸数量map mapProductTemplate = make(map[int64]struct{}) //产品模板map ) + //选了商家类型 + if req.MerchantType > 0 { + merchantInfo, err = l.svcCtx.AllModels.FsMerchantCategory.FindOne(l.ctx, req.MerchantType) + } else { + //随机获取一个商家类型 + merchantInfo, err = l.svcCtx.AllModels.FsMerchantCategory.FindRandOne(l.ctx) + } + if err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + return resp.SetStatusWithMessage(basic.CodeDbRecordNotFoundErr, "none of merchant type found") + } + logx.Error(err) + return resp.SetStatusWithMessage(basic.CodeDbSqlErr, "failed to get merchant type info") + } + if *merchantInfo.RecommendProduct == "" { + return resp.SetStatusWithMessage(basic.CodeOK, "success", []interface{}{}) + } + recommendProductIds, err := format.StrSlicToInt64Slice(strings.Split(*merchantInfo.RecommendProduct, ",")) + if err != nil { + logx.Error(err) + return resp.SetStatusWithMessage(basic.CodeServiceErr, "failed to parse recommend product") + } //获取列表推荐产品 - recommendProductList, _, err = l.svcCtx.AllModels.FsProductRecommend.GetRecommendProductList(gmodel.GetRecommendProductListReq{ - Ctx: l.ctx, - MerchantType: req.MerchantType, - Page: 1, - Limit: 500, //设置最大500 - }) + recommendProductList, err = l.svcCtx.AllModels.FsProduct.GetProductListByIds(l.ctx, recommendProductIds, "sort-desc") + if err != nil { + logx.Error(err) + return resp.SetStatusWithMessage(basic.CodeDbSqlErr, "failed to get product list") + } if len(recommendProductList) == 0 { return resp.SetStatusWithMessage(basic.CodeOK, "success", []interface{}{}) } diff --git a/server/product/internal/types/types.go b/server/product/internal/types/types.go index 5cb5c2d4..435229a7 100644 --- a/server/product/internal/types/types.go +++ b/server/product/internal/types/types.go @@ -341,6 +341,7 @@ type GetSizeByPidRsp struct { type GetTemplateByPidReq struct { Pid string `form:"pid"` + ProductSizeId int64 `form:"product_size_id,optional"` ProductTemplateTagId int64 `form:"product_template_tag_id"` } diff --git a/server_api/product.api b/server_api/product.api index 1f37a789..0fd841bf 100644 --- a/server_api/product.api +++ b/server_api/product.api @@ -386,6 +386,7 @@ type GetSizeByPidRsp { //获取产品模板 type GetTemplateByPidReq { Pid string `form:"pid"` + ProductSizeId int64 `form:"product_size_id,optional"` ProductTemplateTagId int64 `form:"product_template_tag_id"` } //获取产品配件数据 From 76b291c02a7373c86a669c885d4b80678b3a356c Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Mon, 14 Aug 2023 11:46:29 +0800 Subject: [PATCH 18/23] fix --- server/product/internal/logic/gettagproductlistlogic.go | 5 +++-- .../internal/logic/homepagerecommendproductlistlogic.go | 6 ++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/server/product/internal/logic/gettagproductlistlogic.go b/server/product/internal/logic/gettagproductlistlogic.go index 8c6f5a3c..480e2bc1 100644 --- a/server/product/internal/logic/gettagproductlistlogic.go +++ b/server/product/internal/logic/gettagproductlistlogic.go @@ -366,12 +366,13 @@ func (l *GetTagProductListLogic) getTagProducts(req getTagProductsReq) (productL MinPrice: minPrice, HaveOptionalFitting: haveOptionalFitting, Recommended: *productInfo.IsRecommend > 0, + Cover: *productInfo.Cover, } if _, ok = req.MapTagProp[productInfo.Id]; ok { item.CoverDefault = req.MapTagProp[productInfo.Id] } //千人千面处理 - r := image.ThousandFaceImageFormatReq{ + /*r := image.ThousandFaceImageFormatReq{ Size: int(req.Size), IsThousandFace: 0, Cover: *productInfo.Cover, @@ -383,7 +384,7 @@ func (l *GetTagProductListLogic) getTagProducts(req getTagProductsReq) (productL r.IsThousandFace = int(*req.User.IsThousandFace) } image.ThousandFaceImageFormat(&r) - item.Cover = r.Cover + item.Cover = r.Cover*/ //加入分类产品切片 productListRsp = append(productListRsp, item) } diff --git a/server/product/internal/logic/homepagerecommendproductlistlogic.go b/server/product/internal/logic/homepagerecommendproductlistlogic.go index 61708dfa..77a24069 100644 --- a/server/product/internal/logic/homepagerecommendproductlistlogic.go +++ b/server/product/internal/logic/homepagerecommendproductlistlogic.go @@ -170,12 +170,14 @@ func (l *HomePageRecommendProductListLogic) HomePageRecommendProductList(req *ty Id: productInfo.Id, Sn: *productInfo.Sn, Title: *productInfo.Title, + Cover: *productInfo.Cover, + CoverDefault: *productInfo.Cover, SizeNum: uint32(sizeNum), MinPrice: minPrice, HaveOptionalFitting: haveOptionalFitting, } //千人千面处理 - r := image.ThousandFaceImageFormatReq{ + /*r := image.ThousandFaceImageFormatReq{ Size: int(req.Size), IsThousandFace: 0, Cover: *productInfo.Cover, @@ -189,7 +191,7 @@ func (l *HomePageRecommendProductListLogic) HomePageRecommendProductList(req *ty } image.ThousandFaceImageFormat(&r) item.Cover = r.Cover - item.CoverDefault = r.CoverDefault + item.CoverDefault = r.CoverDefault*/ //加入分类产品切片 listRsp = append(listRsp, item) } From aa895fda51e756b169f1905d5598b8cda13a3213 Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Mon, 14 Aug 2023 11:49:02 +0800 Subject: [PATCH 19/23] fix --- .../internal/logic/homepagerecommendproductlistlogic.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/server/product/internal/logic/homepagerecommendproductlistlogic.go b/server/product/internal/logic/homepagerecommendproductlistlogic.go index 77a24069..6273a99a 100644 --- a/server/product/internal/logic/homepagerecommendproductlistlogic.go +++ b/server/product/internal/logic/homepagerecommendproductlistlogic.go @@ -7,7 +7,6 @@ import ( "fusenapi/utils/auth" "fusenapi/utils/basic" "fusenapi/utils/format" - "fusenapi/utils/image" "gorm.io/gorm" "sort" "strings" @@ -36,7 +35,7 @@ func NewHomePageRecommendProductListLogic(ctx context.Context, svcCtx *svc.Servi func (l *HomePageRecommendProductListLogic) HomePageRecommendProductList(req *types.HomePageRecommendProductListReq, userinfo *auth.UserInfo) (resp *basic.Response) { //查询用户信息(不用判断存在) - user, err := l.svcCtx.AllModels.FsUser.FindUserById(l.ctx, userinfo.UserId) + _, err := l.svcCtx.AllModels.FsUser.FindUserById(l.ctx, userinfo.UserId) if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { logx.Error(err) return resp.SetStatusWithMessage(basic.CodeServiceErr, "get user info err") From 06e32e6af9c757605c4190e6f0797ee902d54380 Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Mon, 14 Aug 2023 11:53:16 +0800 Subject: [PATCH 20/23] fix --- .../logic/homepagerecommendproductlistlogic.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/server/product/internal/logic/homepagerecommendproductlistlogic.go b/server/product/internal/logic/homepagerecommendproductlistlogic.go index 6273a99a..3656f78e 100644 --- a/server/product/internal/logic/homepagerecommendproductlistlogic.go +++ b/server/product/internal/logic/homepagerecommendproductlistlogic.go @@ -44,13 +44,13 @@ func (l *HomePageRecommendProductListLogic) HomePageRecommendProductList(req *ty merchantInfo *gmodel.FsMerchantCategory recommendProductList []gmodel.FsProduct //产品列表(select 字段需要看查询的地方) productOptionalPartList []gmodel.GetGroupPartListByProductIdsRsp //产品配件列表 - mapProductHaveOptionFitting = make(map[int64]struct{}) - productPriceList []gmodel.GetPriceListByProductIdsRsp //产品价格列表(select 字段需要看查询的地方) - mapProductMinPrice = make(map[int64]int64) //产品最小价格map - productTemplatesV2 []gmodel.FsProductTemplateV2 //产品模板列表(select 字段需要看查询的地方) - productSizeCountList []gmodel.CountProductSizeByStatusRsp //产品尺寸数量列表(select 字段需要看查询的地方) - mapProductSizeCount = make(map[int64]int64) //产品尺寸数量map - mapProductTemplate = make(map[int64]struct{}) //产品模板map + mapProductHaveOptionFitting = make(map[int64]struct{}) //是否有配件map + productPriceList []gmodel.GetPriceListByProductIdsRsp //产品价格列表(select 字段需要看查询的地方) + mapProductMinPrice = make(map[int64]int64) //产品最小价格map + productTemplatesV2 []gmodel.FsProductTemplateV2 //产品模板列表(select 字段需要看查询的地方) + productSizeCountList []gmodel.CountProductSizeByStatusRsp //产品尺寸数量列表(select 字段需要看查询的地方) + mapProductSizeCount = make(map[int64]int64) //产品尺寸数量map + mapProductTemplate = make(map[int64]struct{}) //产品模板map ) //选了商家类型 if req.MerchantType > 0 { From 5bc6f411bed552831f181774a57365d089bae98c Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Mon, 14 Aug 2023 12:05:22 +0800 Subject: [PATCH 21/23] fix --- server/render/consumer/assemble_render_data.go | 8 ++++---- utils/websocket_data/render_data.go | 4 ++++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/server/render/consumer/assemble_render_data.go b/server/render/consumer/assemble_render_data.go index 5b041711..bf368975 100644 --- a/server/render/consumer/assemble_render_data.go +++ b/server/render/consumer/assemble_render_data.go @@ -183,10 +183,10 @@ func getCombineImage(ctx context.Context, svcCtx *svc.ServiceContext, parseInfo //需要替换的参数 replaceData := map[string]interface{}{ "logo_url": parseInfo.RenderData.Logo, - "website": "", - "slogan": "", - "address": "", - "phone": "", + "website": parseInfo.RenderData.Website, + "slogan": parseInfo.RenderData.Slogan, + "address": parseInfo.RenderData.Address, + "phone": parseInfo.RenderData.Phone, "colors": []string{}, "template_tagid": []string{"b1a"}, "is_crop": false, diff --git a/utils/websocket_data/render_data.go b/utils/websocket_data/render_data.go index 8bde5dbe..fcec9690 100644 --- a/utils/websocket_data/render_data.go +++ b/utils/websocket_data/render_data.go @@ -16,6 +16,10 @@ type RenderData struct { ProductId int64 `json:"product_id"` //产品id UserMaterialId int64 `json:"user_material_id"` //用户素材id Logo string `json:"logo"` //log资源地址(websocket连接建立再赋值) + Website string `json:"website"` //网站 + Slogan string `json:"slogan"` //slogan + Address string `json:"address"` //地址 + Phone string `json:"phone"` //电话 UserId int64 `json:"user_id"` //用户id(websocket连接建立再赋值) GuestId int64 `json:"guest_id"` //游客id(websocket连接建立再赋值) } From 35b02302ebf55add154543537fb122228b6e6c44 Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Mon, 14 Aug 2023 12:30:14 +0800 Subject: [PATCH 22/23] fix --- .../logic/getrecommandproductlistlogic.go | 46 +++++++++++++------ .../homepagerecommendproductlistlogic.go | 17 ++++++- server/product/internal/types/types.go | 36 +++++++-------- server_api/product.api | 36 +++++++-------- 4 files changed, 83 insertions(+), 52 deletions(-) diff --git a/server/product/internal/logic/getrecommandproductlistlogic.go b/server/product/internal/logic/getrecommandproductlistlogic.go index f3bf72be..3d4e9734 100644 --- a/server/product/internal/logic/getrecommandproductlistlogic.go +++ b/server/product/internal/logic/getrecommandproductlistlogic.go @@ -113,14 +113,27 @@ func (l *GetRecommandProductListLogic) GetRecommandProductList(req *types.GetRec } } //获取用户信息(不用判断存在) - user, err := l.svcCtx.AllModels.FsUser.FindUserById(l.ctx, userinfo.UserId) + /*user, err := l.svcCtx.AllModels.FsUser.FindUserById(l.ctx, userinfo.UserId) if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { logx.Error(err) return resp.SetStatusWithMessage(basic.CodeDbSqlErr, "failed to get user") + }*/ + //获取产品标签相关属性 + productTagPropList, err := l.svcCtx.AllModels.FsProductTagProp.GetTagPropByProductIdsWithProductTag(l.ctx, productIds) + if err != nil { + logx.Error(err) + return resp.SetStatusWithMessage(basic.CodeDbSqlErr, "failed to get product tag property") + } + mapTagProp := make(map[int64][]types.CoverDefaultItem) + for _, v := range productTagPropList { + mapTagProp[*v.ProductId] = append(mapTagProp[*v.ProductId], types.CoverDefaultItem{ + Tag: v.Title, + Cover: *v.Cover, + }) } list := make([]types.GetRecommandProductListRsp, 0, len(recommendProductList)) for _, v := range recommendProductList { - r := image.ThousandFaceImageFormatReq{ + /*r := image.ThousandFaceImageFormatReq{ Size: int(req.Size), IsThousandFace: 0, Cover: *v.Cover, @@ -133,7 +146,7 @@ func (l *GetRecommandProductListLogic) GetRecommandProductList(req *types.GetRec r.IsThousandFace = int(*user.IsThousandFace) } //千人前面处理 - image.ThousandFaceImageFormat(&r) + image.ThousandFaceImageFormat(&r)*/ isRecommend := int64(0) if _, ok := mapRecommend[v.Id]; ok { isRecommend = 1 @@ -142,18 +155,21 @@ func (l *GetRecommandProductListLogic) GetRecommandProductList(req *types.GetRec if minVal, ok := mapProductMinPrice[v.Id]; ok { minPrice = minVal } - list = append(list, types.GetRecommandProductListRsp{ - Id: v.Id, - Sn: *v.Sn, - Title: *v.Title, - TitleCn: *v.TitleCn, - Cover: r.Cover, - CoverImg: r.CoverImg, - CoverDefault: r.CoverDefault, - Intro: *v.Intro, - IsRecommend: isRecommend, - MinPrice: minPrice, - }) + item := types.GetRecommandProductListRsp{ + Id: v.Id, + Sn: *v.Sn, + Title: *v.Title, + TitleCn: *v.TitleCn, + Cover: *productInfo.Cover, + CoverImg: *productInfo.CoverImg, + Intro: *v.Intro, + IsRecommend: isRecommend, + MinPrice: minPrice, + } + if _, ok := mapTagProp[productInfo.Id]; ok { + item.CoverDefault = mapTagProp[productInfo.Id] + } + list = append(list, item) } return resp.SetStatusWithMessage(basic.CodeOK, "success", list) } diff --git a/server/product/internal/logic/homepagerecommendproductlistlogic.go b/server/product/internal/logic/homepagerecommendproductlistlogic.go index 3656f78e..4e5740c9 100644 --- a/server/product/internal/logic/homepagerecommendproductlistlogic.go +++ b/server/product/internal/logic/homepagerecommendproductlistlogic.go @@ -147,6 +147,19 @@ func (l *HomePageRecommendProductListLogic) HomePageRecommendProductList(req *ty for _, v := range productSizeCountList { mapProductSizeCount[v.ProductId] = v.Num } + //获取产品标签相关属性 + productTagPropList, err := l.svcCtx.AllModels.FsProductTagProp.GetTagPropByProductIdsWithProductTag(l.ctx, productIds) + if err != nil { + logx.Error(err) + return resp.SetStatusWithMessage(basic.CodeDbSqlErr, "failed to get product tag property") + } + mapTagProp := make(map[int64][]types.CoverDefaultItem) + for _, v := range productTagPropList { + mapTagProp[*v.ProductId] = append(mapTagProp[*v.ProductId], types.CoverDefaultItem{ + Tag: v.Title, + Cover: *v.Cover, + }) + } //组装返回 listRsp := make([]types.HomePageRecommendProductListRsp, 0, len(recommendProductList)) for _, productInfo := range recommendProductList { @@ -170,11 +183,13 @@ func (l *HomePageRecommendProductListLogic) HomePageRecommendProductList(req *ty Sn: *productInfo.Sn, Title: *productInfo.Title, Cover: *productInfo.Cover, - CoverDefault: *productInfo.Cover, SizeNum: uint32(sizeNum), MinPrice: minPrice, HaveOptionalFitting: haveOptionalFitting, } + if _, ok = mapTagProp[productInfo.Id]; ok { + item.CoverDefault = mapTagProp[productInfo.Id] + } //千人千面处理 /*r := image.ThousandFaceImageFormatReq{ Size: int(req.Size), diff --git a/server/product/internal/types/types.go b/server/product/internal/types/types.go index 435229a7..e44a240f 100644 --- a/server/product/internal/types/types.go +++ b/server/product/internal/types/types.go @@ -234,16 +234,16 @@ type GetRecommandProductListReq struct { } type GetRecommandProductListRsp struct { - Id int64 `json:"id"` - Sn string `json:"sn"` - Title string `json:"title"` - TitleCn string `json:"title_cn"` - Cover string `json:"cover"` - CoverImg string `json:"cover_img"` - CoverDefault string `json:"cover_default"` - Intro string `json:"intro"` - IsRecommend int64 `json:"is_recommend"` - MinPrice int64 `json:"min_price"` + Id int64 `json:"id"` + Sn string `json:"sn"` + Title string `json:"title"` + TitleCn string `json:"title_cn"` + Cover string `json:"cover"` + CoverImg string `json:"cover_img"` + CoverDefault []CoverDefaultItem `json:"cover_default"` + Intro string `json:"intro"` + IsRecommend int64 `json:"is_recommend"` + MinPrice int64 `json:"min_price"` } type GetTagProductListReq struct { @@ -395,14 +395,14 @@ type HomePageRecommendProductListReq struct { } type HomePageRecommendProductListRsp struct { - Id int64 `json:"id"` - Sn string `json:"sn"` - Title string `json:"title"` - Cover string `json:"cover"` - SizeNum uint32 `json:"size_num"` - MinPrice int64 `json:"min_price"` - CoverDefault string `json:"cover_default"` - HaveOptionalFitting bool `json:"have_optional_fitting"` + Id int64 `json:"id"` + Sn string `json:"sn"` + Title string `json:"title"` + Cover string `json:"cover"` + SizeNum uint32 `json:"size_num"` + MinPrice int64 `json:"min_price"` + CoverDefault []CoverDefaultItem `json:"cover_default"` + HaveOptionalFitting bool `json:"have_optional_fitting"` } type Request struct { diff --git a/server_api/product.api b/server_api/product.api index 0fd841bf..cbdc734f 100644 --- a/server_api/product.api +++ b/server_api/product.api @@ -286,16 +286,16 @@ type GetRecommandProductListReq { Sn string `form:"sn"` } type GetRecommandProductListRsp { - Id int64 `json:"id"` - Sn string `json:"sn"` - Title string `json:"title"` - TitleCn string `json:"title_cn"` - Cover string `json:"cover"` - CoverImg string `json:"cover_img"` - CoverDefault string `json:"cover_default"` - Intro string `json:"intro"` - IsRecommend int64 `json:"is_recommend"` - MinPrice int64 `json:"min_price"` + Id int64 `json:"id"` + Sn string `json:"sn"` + Title string `json:"title"` + TitleCn string `json:"title_cn"` + Cover string `json:"cover"` + CoverImg string `json:"cover_img"` + CoverDefault []CoverDefaultItem `json:"cover_default"` + Intro string `json:"intro"` + IsRecommend int64 `json:"is_recommend"` + MinPrice int64 `json:"min_price"` } //获取分类产品列表 type GetTagProductListReq { @@ -437,12 +437,12 @@ type HomePageRecommendProductListReq { MerchantType int64 `form:"merchant_type"` } type HomePageRecommendProductListRsp { - Id int64 `json:"id"` - Sn string `json:"sn"` - Title string `json:"title"` - Cover string `json:"cover"` - SizeNum uint32 `json:"size_num"` - MinPrice int64 `json:"min_price"` - CoverDefault string `json:"cover_default"` - HaveOptionalFitting bool `json:"have_optional_fitting"` + Id int64 `json:"id"` + Sn string `json:"sn"` + Title string `json:"title"` + Cover string `json:"cover"` + SizeNum uint32 `json:"size_num"` + MinPrice int64 `json:"min_price"` + CoverDefault []CoverDefaultItem `json:"cover_default"` + HaveOptionalFitting bool `json:"have_optional_fitting"` } \ No newline at end of file From 68441426032f3d7b32bb38d07bb91061da51605a Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Mon, 14 Aug 2023 12:31:49 +0800 Subject: [PATCH 23/23] fix --- .../logic/getrecommandproductlistlogic.go | 19 ++++++++++--------- .../homepagerecommendproductlistlogic.go | 1 + 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/server/product/internal/logic/getrecommandproductlistlogic.go b/server/product/internal/logic/getrecommandproductlistlogic.go index 3d4e9734..018d68a4 100644 --- a/server/product/internal/logic/getrecommandproductlistlogic.go +++ b/server/product/internal/logic/getrecommandproductlistlogic.go @@ -156,15 +156,16 @@ func (l *GetRecommandProductListLogic) GetRecommandProductList(req *types.GetRec minPrice = minVal } item := types.GetRecommandProductListRsp{ - Id: v.Id, - Sn: *v.Sn, - Title: *v.Title, - TitleCn: *v.TitleCn, - Cover: *productInfo.Cover, - CoverImg: *productInfo.CoverImg, - Intro: *v.Intro, - IsRecommend: isRecommend, - MinPrice: minPrice, + Id: v.Id, + Sn: *v.Sn, + Title: *v.Title, + TitleCn: *v.TitleCn, + Cover: *productInfo.Cover, + CoverImg: *productInfo.CoverImg, + CoverDefault: []types.CoverDefaultItem{}, + Intro: *v.Intro, + IsRecommend: isRecommend, + MinPrice: minPrice, } if _, ok := mapTagProp[productInfo.Id]; ok { item.CoverDefault = mapTagProp[productInfo.Id] diff --git a/server/product/internal/logic/homepagerecommendproductlistlogic.go b/server/product/internal/logic/homepagerecommendproductlistlogic.go index 4e5740c9..a8bd03df 100644 --- a/server/product/internal/logic/homepagerecommendproductlistlogic.go +++ b/server/product/internal/logic/homepagerecommendproductlistlogic.go @@ -183,6 +183,7 @@ func (l *HomePageRecommendProductListLogic) HomePageRecommendProductList(req *ty Sn: *productInfo.Sn, Title: *productInfo.Title, Cover: *productInfo.Cover, + CoverDefault: []types.CoverDefaultItem{}, SizeNum: uint32(sizeNum), MinPrice: minPrice, HaveOptionalFitting: haveOptionalFitting,