Merge branch 'develop' of https://gitee.com/fusenpack/fusenapi into develop

This commit is contained in:
eson 2023-08-31 12:20:09 +08:00
commit 046ecb0ffb
6 changed files with 244 additions and 75 deletions

View File

@ -9,6 +9,7 @@ import (
type Repositories struct { type Repositories struct {
ImageHandle repositories.ImageHandle ImageHandle repositories.ImageHandle
NewResource repositories.Resource
} }
type NewAllRepositorieData struct { type NewAllRepositorieData struct {
@ -20,5 +21,6 @@ type NewAllRepositorieData struct {
func NewAllRepositories(newData *NewAllRepositorieData) *Repositories { func NewAllRepositories(newData *NewAllRepositorieData) *Repositories {
return &Repositories{ return &Repositories{
ImageHandle: repositories.NewImageHandle(newData.GormDB, newData.BLMServiceUrl, newData.AwsSession), ImageHandle: repositories.NewImageHandle(newData.GormDB, newData.BLMServiceUrl, newData.AwsSession),
NewResource: repositories.NewResource(newData.GormDB, newData.BLMServiceUrl, newData.AwsSession),
} }
} }

View File

@ -117,7 +117,7 @@ func (t *FsProductTemplateV2Model) GetProductTemplateListByParams(ctx context.Co
func (t *FsProductTemplateV2Model) FindFirstOneCloudRenderByProductIdModelIdTemplateTag(ctx context.Context, productId, modelId int64, templateTag string) (resp *FsProductTemplateV2, err error) { func (t *FsProductTemplateV2Model) FindFirstOneCloudRenderByProductIdModelIdTemplateTag(ctx context.Context, productId, modelId int64, templateTag string) (resp *FsProductTemplateV2, err error) {
err = t.db.WithContext(ctx).Model(&FsProductTemplateV2{}). err = t.db.WithContext(ctx).Model(&FsProductTemplateV2{}).
Where("product_id = ? and model_id = ? and template_tag = ? ", productId, modelId, templateTag). Where("product_id = ? and model_id = ? and template_tag = ? ", productId, modelId, templateTag).
Where("status = ? and is_del = ? and element_model_id != ?", 1, 0, 0). Where("status = ? and is_del = ?", 1, 0).
Order("sort ASC"). Order("sort ASC").
Take(&resp).Error Take(&resp).Error
return resp, err return resp, err

View File

@ -3,7 +3,9 @@ package logic
import ( import (
"bytes" "bytes"
"encoding/json" "encoding/json"
"fmt"
"fusenapi/model/gmodel" "fusenapi/model/gmodel"
"fusenapi/service/repositories"
"fusenapi/utils/auth" "fusenapi/utils/auth"
"fusenapi/utils/basic" "fusenapi/utils/basic"
"fusenapi/utils/file" "fusenapi/utils/file"
@ -96,6 +98,7 @@ func (l *LogoResizeLogic) LogoResize(req *types.LogoResizeReq, userinfo *auth.Us
hashKeyDataB, _ := json.Marshal(req) hashKeyDataB, _ := json.Marshal(req)
json.Unmarshal(hashKeyDataB, &hashKeyDataMap) json.Unmarshal(hashKeyDataB, &hashKeyDataMap)
var resourceId string = hash.JsonHashKey(hashKeyDataMap) var resourceId string = hash.JsonHashKey(hashKeyDataMap)
fmt.Println(resourceId)
// 上传文件 // 上传文件
var upload = file.Upload{ var upload = file.Upload{
@ -116,10 +119,28 @@ func (l *LogoResizeLogic) LogoResize(req *types.LogoResizeReq, userinfo *auth.Us
logx.Errorf("upload UploadFileByByte err: %v", err) logx.Errorf("upload UploadFileByByte err: %v", err)
return resp.SetStatus(basic.CodeFileNoFoundErr) return resp.SetStatus(basic.CodeFileNoFoundErr)
} }
metadataChild := make(map[string]interface{}, 1)
metadataChildData := make(map[string]interface{}, 1)
metadataChildKey := fmt.Sprintf("%d*%d", req.Width, req.Height)
metadataChildData[metadataChildKey] = repositories.Cropping{
ResourceId: uploadRes.ResourceId,
ResourceUrl: uploadRes.ResourceUrl,
Width: req.Width,
Height: req.Height,
}
metadataChild["cropping"] = metadataChildData
// 原图metadata 更新 // 原图metadata 更新
_, err = l.svcCtx.Repositories.NewResource.UpdateMetadata(l.ctx, &repositories.UpdateMetadataReq{
ResourceId: req.ResourceId,
MetadataChild: metadataChild,
})
// 返回成功的响应和上传URL if err != nil {
return resp.SetStatus(basic.CodeServiceErr, "原图metadata更新失败")
}
// 返回成功的响应
return resp.SetStatus(basic.CodeOK, map[string]interface{}{ return resp.SetStatus(basic.CodeOK, map[string]interface{}{
"resource_id": uploadRes.ResourceId, "resource_id": uploadRes.ResourceId,
"resource_url": uploadRes.ResourceUrl, "resource_url": uploadRes.ResourceUrl,

View File

@ -92,7 +92,7 @@ func (w *wsConnectItem) renderImage(data []byte) {
userMaterial, err := w.logic.svcCtx.AllModels.FsUserMaterial.FindLatestOne(w.logic.ctx, w.userId, w.guestId) userMaterial, err := w.logic.svcCtx.AllModels.FsUserMaterial.FindLatestOne(w.logic.ctx, w.userId, w.guestId)
if err != nil { if err != nil {
if !errors.Is(err, gorm.ErrRecordNotFound) { if !errors.Is(err, gorm.ErrRecordNotFound) {
w.renderErrResponse(renderImageData.RenderId, renderImageData.RenderData.TemplateTag, "", "failed to get user logo", renderImageData.RenderData.ProductId, w.userId, w.guestId, 0, 0, 0, 0) w.renderErrResponse(renderImageData.RenderId, renderImageData.RenderData.TemplateTag, "", "获取用户上传logo素材失败", renderImageData.RenderData.ProductId, w.userId, w.guestId, 0, 0, 0, 0)
logx.Error("failed to get user logo") logx.Error("failed to get user logo")
return return
} }
@ -100,10 +100,10 @@ func (w *wsConnectItem) renderImage(data []byte) {
userMaterialDefault, err := w.logic.svcCtx.AllModels.FsUserMaterial.FindOneById(w.logic.ctx, 0) userMaterialDefault, err := w.logic.svcCtx.AllModels.FsUserMaterial.FindOneById(w.logic.ctx, 0)
if err != nil { if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) { if errors.Is(err, gorm.ErrRecordNotFound) {
w.renderErrResponse(renderImageData.RenderId, renderImageData.RenderData.TemplateTag, "", "default logo is not exists", renderImageData.RenderData.ProductId, w.userId, w.guestId, 0, 0, 0, 0) w.renderErrResponse(renderImageData.RenderId, renderImageData.RenderData.TemplateTag, "", "默认logo不存在", renderImageData.RenderData.ProductId, w.userId, w.guestId, 0, 0, 0, 0)
return return
} }
w.renderErrResponse(renderImageData.RenderId, renderImageData.RenderData.TemplateTag, "", "failed to get default logo", renderImageData.RenderData.ProductId, w.userId, w.guestId, 0, 0, 0, 0) w.renderErrResponse(renderImageData.RenderId, renderImageData.RenderData.TemplateTag, "", "获取默认logo失败", renderImageData.RenderData.ProductId, w.userId, w.guestId, 0, 0, 0, 0)
logx.Error("default logo is not exists") logx.Error("default logo is not exists")
return return
} }
@ -123,11 +123,11 @@ func (w *wsConnectItem) renderImage(data []byte) {
} }
if err != nil { if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) { if errors.Is(err, gorm.ErrRecordNotFound) {
w.renderErrResponse(renderImageData.RenderId, renderImageData.RenderData.TemplateTag, "", "product first size is not exists", renderImageData.RenderData.ProductId, w.userId, w.guestId, 0, 0, renderImageData.RenderData.ProductSizeId, 0) w.renderErrResponse(renderImageData.RenderId, renderImageData.RenderData.TemplateTag, "", "找不到产品的第一个尺寸", renderImageData.RenderData.ProductId, w.userId, w.guestId, 0, 0, renderImageData.RenderData.ProductSizeId, 0)
logx.Error("product size is not found") logx.Error("product size is not found")
return return
} }
w.renderErrResponse(renderImageData.RenderId, renderImageData.RenderData.TemplateTag, "", "failed to get product first size", renderImageData.RenderData.ProductId, w.userId, w.guestId, 0, 0, renderImageData.RenderData.ProductSizeId, 0) w.renderErrResponse(renderImageData.RenderId, renderImageData.RenderData.TemplateTag, "", "获取产品的第一个尺寸失败", renderImageData.RenderData.ProductId, w.userId, w.guestId, 0, 0, renderImageData.RenderData.ProductSizeId, 0)
logx.Error("failed to get product size:", err) logx.Error("failed to get product size:", err)
return return
} }
@ -135,11 +135,11 @@ func (w *wsConnectItem) renderImage(data []byte) {
model3dInfo, err := w.logic.svcCtx.AllModels.FsProductModel3d.GetOneBySizeIdTag(w.logic.ctx, productSize.Id, constants.TAG_MODEL, "id") model3dInfo, err := w.logic.svcCtx.AllModels.FsProductModel3d.GetOneBySizeIdTag(w.logic.ctx, productSize.Id, constants.TAG_MODEL, "id")
if err != nil { if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) { if errors.Is(err, gorm.ErrRecordNotFound) {
w.renderErrResponse(renderImageData.RenderId, renderImageData.RenderData.TemplateTag, "", "product model is not exists", renderImageData.RenderData.ProductId, w.userId, w.guestId, 0, 0, productSize.Id, 0) w.renderErrResponse(renderImageData.RenderId, renderImageData.RenderData.TemplateTag, "", "产品第一个尺寸对应的模型不存在", renderImageData.RenderData.ProductId, w.userId, w.guestId, 0, 0, productSize.Id, 0)
logx.Error("product model is not found") logx.Error("product model is not found")
return return
} }
w.renderErrResponse(renderImageData.RenderId, renderImageData.RenderData.TemplateTag, "", "failed to get product model", renderImageData.RenderData.ProductId, w.userId, w.guestId, 0, 0, productSize.Id, 0) w.renderErrResponse(renderImageData.RenderId, renderImageData.RenderData.TemplateTag, "", "获取产品第一个尺寸对应的模型失败", renderImageData.RenderData.ProductId, w.userId, w.guestId, 0, 0, productSize.Id, 0)
logx.Error("failed to get product model:", err) logx.Error("failed to get product model:", err)
return return
} }
@ -147,23 +147,28 @@ func (w *wsConnectItem) renderImage(data []byte) {
productTemplate, err := w.logic.svcCtx.AllModels.FsProductTemplateV2.FindFirstOneCloudRenderByProductIdModelIdTemplateTag(w.logic.ctx, renderImageData.RenderData.ProductId, model3dInfo.Id, renderImageData.RenderData.TemplateTag) productTemplate, err := w.logic.svcCtx.AllModels.FsProductTemplateV2.FindFirstOneCloudRenderByProductIdModelIdTemplateTag(w.logic.ctx, renderImageData.RenderData.ProductId, model3dInfo.Id, renderImageData.RenderData.TemplateTag)
if err != nil { if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) { if errors.Is(err, gorm.ErrRecordNotFound) {
w.renderErrResponse(renderImageData.RenderId, renderImageData.RenderData.TemplateTag, "", "product template is not exists", renderImageData.RenderData.ProductId, w.userId, w.guestId, 0, model3dInfo.Id, productSize.Id, 0) w.renderErrResponse(renderImageData.RenderId, renderImageData.RenderData.TemplateTag, "", "找不到对应模板", renderImageData.RenderData.ProductId, w.userId, w.guestId, 0, model3dInfo.Id, productSize.Id, 0)
logx.Error("template info is not found") logx.Error("template info is not found")
return return
} }
w.renderErrResponse(renderImageData.RenderId, renderImageData.RenderData.TemplateTag, "", "failed to get product template", renderImageData.RenderData.ProductId, w.userId, w.guestId, 0, model3dInfo.Id, productSize.Id, 0) w.renderErrResponse(renderImageData.RenderId, renderImageData.RenderData.TemplateTag, "", "获取对应模板失败", renderImageData.RenderData.ProductId, w.userId, w.guestId, 0, model3dInfo.Id, productSize.Id, 0)
logx.Error("failed to get template info:", err) logx.Error("failed to get template info:", err)
return return
} }
//如果未开启云渲染
if *productTemplate.ElementModelId <= 0 {
w.renderErrResponse(renderImageData.RenderId, renderImageData.RenderData.TemplateTag, "", "模板未开启云渲染", renderImageData.RenderData.ProductId, w.userId, w.guestId, productTemplate.Id, model3dInfo.Id, productSize.Id, *productTemplate.ElementModelId)
return
}
//获取渲染设置信息 //获取渲染设置信息
element, err := w.logic.svcCtx.AllModels.FsProductTemplateElement.FindOneByModelId(w.logic.ctx, *productTemplate.ElementModelId) element, err := w.logic.svcCtx.AllModels.FsProductTemplateElement.FindOneByModelId(w.logic.ctx, *productTemplate.ElementModelId)
if err != nil { if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) { if errors.Is(err, gorm.ErrRecordNotFound) {
w.renderErrResponse(renderImageData.RenderId, renderImageData.RenderData.TemplateTag, "", "render element is not exists", renderImageData.RenderData.ProductId, w.userId, w.guestId, productTemplate.Id, model3dInfo.Id, productSize.Id, *productTemplate.ElementModelId) w.renderErrResponse(renderImageData.RenderId, renderImageData.RenderData.TemplateTag, "", "云渲染设置不存在", renderImageData.RenderData.ProductId, w.userId, w.guestId, productTemplate.Id, model3dInfo.Id, productSize.Id, *productTemplate.ElementModelId)
logx.Error("element info is not found,element_model_id = ", 0) logx.Error("element info is not found,element_model_id = ", 0)
return return
} }
w.renderErrResponse(renderImageData.RenderId, renderImageData.RenderData.TemplateTag, "", "failed to get render element", renderImageData.RenderData.ProductId, w.userId, w.guestId, productTemplate.Id, model3dInfo.Id, productSize.Id, *productTemplate.ElementModelId) w.renderErrResponse(renderImageData.RenderId, renderImageData.RenderData.TemplateTag, "", "获取云渲染设置失败", renderImageData.RenderData.ProductId, w.userId, w.guestId, productTemplate.Id, model3dInfo.Id, productSize.Id, *productTemplate.ElementModelId)
logx.Error("failed to get element ,", err) logx.Error("failed to get element ,", err)
return return
} }
@ -182,7 +187,7 @@ func (w *wsConnectItem) renderImage(data []byte) {
} }
res, err := w.logic.svcCtx.Repositories.ImageHandle.LogoCombine(w.logic.ctx, &combineReq) res, err := w.logic.svcCtx.Repositories.ImageHandle.LogoCombine(w.logic.ctx, &combineReq)
if err != nil { if err != nil {
w.renderErrResponse(renderImageData.RenderId, renderImageData.RenderData.TemplateTag, "", "failed to combine image:"+err.Error(), renderImageData.RenderData.ProductId, w.userId, w.guestId, productTemplate.Id, model3dInfo.Id, productSize.Id, *productTemplate.ElementModelId) w.renderErrResponse(renderImageData.RenderId, renderImageData.RenderData.TemplateTag, "", "合成刀版图失败:"+err.Error(), renderImageData.RenderData.ProductId, w.userId, w.guestId, productTemplate.Id, model3dInfo.Id, productSize.Id, *productTemplate.ElementModelId)
logx.Error("合成刀版图失败,合成请求数据:", combineReq, "错误信息:", err) logx.Error("合成刀版图失败,合成请求数据:", combineReq, "错误信息:", err)
return return
} }
@ -190,7 +195,7 @@ func (w *wsConnectItem) renderImage(data []byte) {
if res != nil && res.ResourceUrl != nil { if res != nil && res.ResourceUrl != nil {
combineImage = *res.ResourceUrl combineImage = *res.ResourceUrl
} else { } else {
w.renderErrResponse(renderImageData.RenderId, renderImageData.RenderData.TemplateTag, "", "combine image is empty", renderImageData.RenderData.ProductId, w.userId, w.guestId, productTemplate.Id, model3dInfo.Id, productSize.Id, *productTemplate.ElementModelId) w.renderErrResponse(renderImageData.RenderId, renderImageData.RenderData.TemplateTag, "", "合成的刀版图是空的地址", renderImageData.RenderData.ProductId, w.userId, w.guestId, productTemplate.Id, model3dInfo.Id, productSize.Id, *productTemplate.ElementModelId)
logx.Error("合成刀版图失败,合成的刀版图是空指针:", err) logx.Error("合成刀版图失败,合成的刀版图是空指针:", err)
return return
} }
@ -207,7 +212,7 @@ func (w *wsConnectItem) renderImage(data []byte) {
resource, err := w.logic.svcCtx.AllModels.FsResource.FindOneById(w.logic.ctx, taskId) resource, err := w.logic.svcCtx.AllModels.FsResource.FindOneById(w.logic.ctx, taskId)
if err != nil { if err != nil {
if !errors.Is(err, gorm.ErrRecordNotFound) { if !errors.Is(err, gorm.ErrRecordNotFound) {
w.renderErrResponse(renderImageData.RenderId, renderImageData.RenderData.TemplateTag, taskId, "failed to get render cache", renderImageData.RenderData.ProductId, w.userId, w.guestId, productTemplate.Id, model3dInfo.Id, productSize.Id, *productTemplate.ElementModelId) w.renderErrResponse(renderImageData.RenderId, renderImageData.RenderData.TemplateTag, taskId, "获取unity云渲染缓存失败", renderImageData.RenderData.ProductId, w.userId, w.guestId, productTemplate.Id, model3dInfo.Id, productSize.Id, *productTemplate.ElementModelId)
logx.Error("failed to find render resource:", err) logx.Error("failed to find render resource:", err)
return return
} }
@ -258,7 +263,7 @@ func (w *wsConnectItem) assembleRenderDataToUnity(taskId string, combineImage st
refletion, err = strconv.Atoi(*element.Refletion) refletion, err = strconv.Atoi(*element.Refletion)
if err != nil { if err != nil {
logx.Error("err refletion:set default -1") logx.Error("err refletion:set default -1")
w.renderErrResponse(info.RenderId, info.RenderData.TemplateTag, taskId, "parse element.Refletion from string to number err", info.RenderData.ProductId, w.userId, w.guestId, productTemplate.Id, model3dInfo.Id, productSize.Id, *productTemplate.ElementModelId) w.renderErrResponse(info.RenderId, info.RenderData.TemplateTag, taskId, "解析云渲染设置把Refletion字段值从字符串转数字失败", info.RenderData.ProductId, w.userId, w.guestId, productTemplate.Id, model3dInfo.Id, productSize.Id, *productTemplate.ElementModelId)
return err return err
} }
} }
@ -267,7 +272,7 @@ func (w *wsConnectItem) assembleRenderDataToUnity(taskId string, combineImage st
if element.Mode != nil && *element.Mode != "" { if element.Mode != nil && *element.Mode != "" {
if err = json.Unmarshal([]byte(*element.Mode), &mode); err != nil { if err = json.Unmarshal([]byte(*element.Mode), &mode); err != nil {
logx.Error("faile to parse element mode json:", err) logx.Error("faile to parse element mode json:", err)
w.renderErrResponse(info.RenderId, info.RenderData.TemplateTag, taskId, "parse element.Mode err", info.RenderData.ProductId, w.userId, w.guestId, productTemplate.Id, model3dInfo.Id, productSize.Id, *productTemplate.ElementModelId) w.renderErrResponse(info.RenderId, info.RenderData.TemplateTag, taskId, "解析云渲染设置字段 mode 为map对象失败", info.RenderData.ProductId, w.userId, w.guestId, productTemplate.Id, model3dInfo.Id, productSize.Id, *productTemplate.ElementModelId)
return err return err
} }
} }
@ -342,7 +347,7 @@ func (w *wsConnectItem) assembleRenderDataToUnity(taskId string, combineImage st
unityRenderBeginTime := time.Now().UTC().UnixMilli() unityRenderBeginTime := time.Now().UTC().UnixMilli()
_, err = curl.ApiCall(url, "POST", header, bytes.NewReader(postDataBytes), time.Second*10) _, err = curl.ApiCall(url, "POST", header, bytes.NewReader(postDataBytes), time.Second*10)
if err != nil { if err != nil {
w.renderErrResponse(info.RenderId, info.RenderData.TemplateTag, taskId, "request unity api err", info.RenderData.ProductId, w.userId, w.guestId, productTemplate.Id, model3dInfo.Id, productSize.Id, *productTemplate.ElementModelId) w.renderErrResponse(info.RenderId, info.RenderData.TemplateTag, taskId, "请求unity接口失败", info.RenderData.ProductId, w.userId, w.guestId, productTemplate.Id, model3dInfo.Id, productSize.Id, *productTemplate.ElementModelId)
logx.Error("failed to send data to unity") logx.Error("failed to send data to unity")
return err return err
} }
@ -480,8 +485,11 @@ func (w *wsConnectItem) operationRenderTask() {
case data := <-w.extendRenderProperty.renderImageTaskCtlChan: case data := <-w.extendRenderProperty.renderImageTaskCtlChan:
switch data.option { switch data.option {
case 0: //渲染结果回调,删除任务 case 0: //渲染结果回调,删除任务
taskData, ok := w.extendRenderProperty.renderImageTask[data.taskId]
if !ok {
continue
}
//存在任务,则发送渲染结果给前端 //存在任务,则发送渲染结果给前端
if taskData, ok := w.extendRenderProperty.renderImageTask[data.taskId]; ok {
CombineTakesTime := "0ms" CombineTakesTime := "0ms"
UnityRenderTakesTime := "0ms" UnityRenderTakesTime := "0ms"
uploadCombineImageTakesTime := "0ms" uploadCombineImageTakesTime := "0ms"
@ -513,16 +521,17 @@ func (w *wsConnectItem) operationRenderTask() {
UploadUnityRenderImageTakesTime: uploadUnityRenderImageTakesTime, UploadUnityRenderImageTakesTime: uploadUnityRenderImageTakesTime,
}, },
})) }))
}
//删除任务 //删除任务
delete(w.extendRenderProperty.renderImageTask, data.taskId) delete(w.extendRenderProperty.renderImageTask, data.taskId)
case 1: //新增任务 case 1: //新增任务
w.extendRenderProperty.renderImageTask[data.taskId] = &renderTask{ w.extendRenderProperty.renderImageTask[data.taskId] = &renderTask{
renderId: data.renderId, renderId: data.renderId,
} }
case 2: //修改任务属性 case 2: //修改任务属性
if taskData, ok := w.extendRenderProperty.renderImageTask[data.taskId]; ok { taskData, ok := w.extendRenderProperty.renderImageTask[data.taskId]
if !ok {
continue
}
//合图耗时 //合图耗时
if data.taskProperty.combineTakesTime != 0 { if data.taskProperty.combineTakesTime != 0 {
taskData.combineTakesTime = data.taskProperty.combineTakesTime taskData.combineTakesTime = data.taskProperty.combineTakesTime
@ -546,5 +555,4 @@ func (w *wsConnectItem) operationRenderTask() {
} }
} }
} }
}
} }

View File

@ -193,9 +193,17 @@ func (l *defaultImageHandle) LogoCombine(ctx context.Context, in *LogoCombineReq
productTemplateV2Info, err := productTemplateV2Model.FindOne(ctx, in.TemplateId) productTemplateV2Info, err := productTemplateV2Model.FindOne(ctx, in.TemplateId)
if err != nil { if err != nil {
logx.Error(err) logc.Errorf(ctx, "productTemplateV2Model.FindOne%v", err)
return nil, err return nil, err
} }
productTemplateTagInfo, err := gmodel.NewFsProductTemplateTagsModel(l.MysqlConn).FindOneByTagName(ctx, in.TemplateTag, "groups")
if err != nil {
logc.Errorf(ctx, "NewFsProductTemplateTagsModel.FindOneByTagName%v", err)
return nil, err
}
var groupOptions map[string]interface{} var groupOptions map[string]interface{}
var materialList []interface{} var materialList []interface{}
if productTemplateV2Info.TemplateInfo != nil { if productTemplateV2Info.TemplateInfo != nil {
@ -216,6 +224,13 @@ func (l *defaultImageHandle) LogoCombine(ctx context.Context, in *LogoCombineReq
moduleDataMap["groupOptions"] = groupOptions moduleDataMap["groupOptions"] = groupOptions
moduleDataMap["materialList"] = materialList moduleDataMap["materialList"] = materialList
var tagDataMap []interface{}
err = json.Unmarshal([]byte(*productTemplateTagInfo.Groups), &tagDataMap)
if err != nil {
logc.Errorf(ctx, "Unmarshal tagDataMap%v", err)
return nil, err
}
var combineParam map[string]interface{} var combineParam map[string]interface{}
json.Unmarshal([]byte(*resLogoInfo.Metadata), &combineParam) json.Unmarshal([]byte(*resLogoInfo.Metadata), &combineParam)
combineParam["template_tagid"] = in.TemplateTag combineParam["template_tagid"] = in.TemplateTag
@ -227,6 +242,7 @@ func (l *defaultImageHandle) LogoCombine(ctx context.Context, in *LogoCombineReq
var postMap = make(map[string]interface{}, 2) var postMap = make(map[string]interface{}, 2)
postMap["module_data"] = moduleDataMap postMap["module_data"] = moduleDataMap
postMap["tag_data"] = tagDataMap
postMap["param_data"] = combineParam postMap["param_data"] = combineParam
logc.Infof(ctx, "合图--算法请求--合图--开始时间:%v", time.Now().UTC()) logc.Infof(ctx, "合图--算法请求--合图--开始时间:%v", time.Now().UTC())

View File

@ -0,0 +1,122 @@
package repositories
import (
"context"
"encoding/json"
"fusenapi/model/gmodel"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/zeromicro/go-zero/core/logc"
"gorm.io/gorm"
)
func NewResource(gormDB *gorm.DB, bLMServiceUrl *string, awsSession *session.Session) Resource {
return &defaultResource{
MysqlConn: gormDB,
BLMServiceUrl: bLMServiceUrl,
AwsSession: awsSession,
}
}
type (
defaultResource struct {
MysqlConn *gorm.DB
BLMServiceUrl *string
AwsSession *session.Session
}
Resource interface {
// 更新metadata
UpdateMetadata(ctx context.Context, in *UpdateMetadataReq) (*UpdateMetadataRes, error)
}
)
// 全局
type (
Cropping struct {
ResourceId string `json:"resource_id"`
ResourceUrl string `json:"resource_url"`
Width int64 `json:"width"`
Height int64 `json:"height"`
}
)
/* 更新metadata */
type (
UpdateMetadataReq struct {
ResourceId string `json:"resource_id"`
MetadataChild map[string]interface{} `json:"metadata_child"`
}
UpdateMetadataRes struct{}
)
// 更新metadata
func (d *defaultResource) UpdateMetadata(ctx context.Context, in *UpdateMetadataReq) (*UpdateMetadataRes, error) {
// 事务处理
err := d.MysqlConn.Transaction(func(tx *gorm.DB) error {
var NewFsResourceModel = gmodel.NewFsResourceModel(tx)
oldResourceWhere := tx.Where("resource_id = ?", in.ResourceId)
oldResource, err := NewFsResourceModel.FindOneByQuery(ctx, oldResourceWhere, nil)
if err != nil || oldResource.ResourceId == "" {
logc.Errorf(ctx, "FindOneByQuery oldResource error: %v", err)
return err
}
var newResourceMetadata string
if oldResource.Metadata != nil && *oldResource.Metadata != "{}" {
var oldResourceMetadata map[string]interface{}
err = json.Unmarshal([]byte(*oldResource.Metadata), &oldResourceMetadata)
if err != nil {
logc.Errorf(ctx, "Unmarshal oldResourceMetadata error: %v", err)
return err
}
for k, v := range in.MetadataChild {
switch val := v.(type) {
case map[string]interface{}:
oldResourceMetadataData := oldResourceMetadata[k].(map[string]interface{})
for key := range val {
oldResourceMetadataData[key] = val
}
oldResourceMetadata[k] = oldResourceMetadataData
}
}
oldResourceMetadataB, err := json.Marshal(oldResourceMetadata)
if err != nil {
logc.Errorf(ctx, "Marshal oldResourceMetadata error: %v", err)
return err
}
newResourceMetadata = string(oldResourceMetadataB)
} else {
var resourceMetadata = make(map[string]interface{}, len(in.MetadataChild))
for k, v := range in.MetadataChild {
switch val := v.(type) {
case map[string]interface{}:
var resourceMetadataData = make(map[string]interface{}, len(val))
for key := range val {
resourceMetadataData[key] = val
}
resourceMetadata[k] = resourceMetadataData
}
}
newResourceMetadataB, err := json.Marshal(resourceMetadata)
if err != nil {
logc.Errorf(ctx, "Marshal oldResourceMetadata error: %v", err)
return err
}
newResourceMetadata = string(newResourceMetadataB)
}
oldResource.Metadata = &newResourceMetadata
_, err = NewFsResourceModel.BuilderUpdate(ctx, tx, oldResource)
if err != nil {
logc.Errorf(ctx, "Transaction UpdateMetadata error: %v", err)
return err
}
return nil
})
if err != nil {
logc.Errorf(ctx, "BuilderUpdate oldResource error: %v", err)
return nil, err
}
return nil, nil
}
/* 更新metadata */