From 360c19a8f5f69d1e95af42ac67cf9d415c723995 Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Fri, 10 Nov 2023 10:23:26 +0800 Subject: [PATCH] fix --- constants/websocket.go | 11 ++++++----- .../internal/logic/rendernotifylogic.go | 5 +++++ .../internal/logic/ws_err_response.go | 8 ++++++++ .../websocket/internal/logic/ws_ok_response.go | 2 +- .../internal/logic/ws_render_image.go | 6 ++++++ utils/websocket_data/render_data.go | 18 ++++++++++++------ 6 files changed, 38 insertions(+), 12 deletions(-) diff --git a/constants/websocket.go b/constants/websocket.go index 4fd14ff5..aea30b29 100644 --- a/constants/websocket.go +++ b/constants/websocket.go @@ -21,11 +21,12 @@ const ( // websocket消息类型(云渲染类别) const ( - WEBSOCKET_RENDER_IMAGE Websocket = "WEBSOCKET_RENDER_IMAGE" //图片渲染消息(1级消息,双向通信) - WEBSOCKET_RENDER_IMAGE_ERR Websocket = "WEBSOCKET_RENDER_IMAGE_ERR" //图片渲染失败消息(1级消息,单向通信) - WEBSOCKET_COMBINE_IMAGE Websocket = "WEBSOCKET_COMBINE_IMAGE" //反回合成刀版图消息(2级消息,单向通信,属于 WEBSOCKET_RENDER_IMAGE 消息的子流程) - WEBSOCKET_ASSEMBLE_RENDER_DATA Websocket = "WEBSOCKET_ASSEMBLE_RENDER_DATA" //组装unity需要的数据 (2级消息,单向通信,属于 WEBSOCKET_RENDER_IMAGE 消息的子流程) - WEBSOCKET_SEND_DATA_TO_UNITY Websocket = "WEBSOCKET_SEND_DATA_TO_UNITY" //发送到unity进行渲染 (2级消息,单向通信,属于 WEBSOCKET_RENDER_IMAGE 消息的子流程) + WEBSOCKET_RENDER_IMAGE Websocket = "WEBSOCKET_RENDER_IMAGE" //图片渲染消息(1级消息,双向通信) + WEBSOCKET_RENDER_IMAGE_ERR Websocket = "WEBSOCKET_RENDER_IMAGE_ERR" //图片渲染失败消息(1级消息,单向通信) + WEBSOCKET_COMBINE_IMAGE Websocket = "WEBSOCKET_COMBINE_IMAGE" //反回合成刀版图消息(2级消息,单向通信,属于 WEBSOCKET_RENDER_IMAGE 消息的子流程) + WEBSOCKET_ASSEMBLE_RENDER_DATA Websocket = "WEBSOCKET_ASSEMBLE_RENDER_DATA" //组装unity需要的数据 (2级消息,单向通信,属于 WEBSOCKET_RENDER_IMAGE 消息的子流程) + WEBSOCKET_SEND_DATA_TO_UNITY Websocket = "WEBSOCKET_SEND_DATA_TO_UNITY" //发送到unity进行渲染 (2级消息,单向通信,属于 WEBSOCKET_RENDER_IMAGE 消息的子流程) + WEBSOCKET_REQUIRE_BROWSER_RESEND_RENDER Websocket = "WEBSOCKET_REQUIRE_BROWSER_RESEND_RENDER" //后端请求前端去重发渲染任务事件(2级消息,单向通信,属于 WEBSOCKET_RENDER_IMAGE 消息的子流程) ) // websocket消息类型(系统数据变更通知) diff --git a/server/websocket/internal/logic/rendernotifylogic.go b/server/websocket/internal/logic/rendernotifylogic.go index 42601440..ed545373 100644 --- a/server/websocket/internal/logic/rendernotifylogic.go +++ b/server/websocket/internal/logic/rendernotifylogic.go @@ -114,6 +114,11 @@ func (l *RenderNotifyLogic) RenderNotify(req *types.RenderNotifyReq, userinfo *a if ws.conn != nil { //发送错误信息给前端 ws.renderErrResponse(requestId, info.TemplateTag, info.TaskId, "unity云渲染错误:"+req.Msg, 0, 0, 0, 0, 0, 0, 0) + //发送给前端重发消息 + ws.requestResendRenderResponse(websocket_data.RequestBrowserResendRenderEvent{ + RequestId: info.RequestId, + Description: "unity require resend", + }) logx.Info("渲染失败且发送了失败信息:", req.Msg) } else { logx.Info("渲染失败且找不到ws连接") diff --git a/server/websocket/internal/logic/ws_err_response.go b/server/websocket/internal/logic/ws_err_response.go index 21576076..ae495a86 100644 --- a/server/websocket/internal/logic/ws_err_response.go +++ b/server/websocket/internal/logic/ws_err_response.go @@ -81,3 +81,11 @@ func (w *wsConnectItem) renderErrResponse(requestId, templateTag, taskId, descri } w.sendToOutChan(w.respondDataFormat(constants.WEBSOCKET_RENDER_IMAGE_ERR, data)) } + +// 渲染失败要求重新发起任务 +func (w *wsConnectItem) requestResendRenderResponse(data websocket_data.RequestBrowserResendRenderEvent) { + if w.debug == nil { + data.Description = "" + } + w.sendToOutChan(w.respondDataFormat(constants.WEBSOCKET_REQUIRE_BROWSER_RESEND_RENDER, data)) +} diff --git a/server/websocket/internal/logic/ws_ok_response.go b/server/websocket/internal/logic/ws_ok_response.go index bcfd7cfb..70ac842a 100644 --- a/server/websocket/internal/logic/ws_ok_response.go +++ b/server/websocket/internal/logic/ws_ok_response.go @@ -32,7 +32,7 @@ func (w *wsConnectItem) sendCombineImageStepResponseMessage(requestId, combineIm SizeId: sizeId, ModelId: modelId, TemplateId: templateId, - CombineProcessTime: websocket_data.CombineProcessTime{ + CombineProcessTime: &websocket_data.CombineProcessTime{ CombineTakesTime: combineTakesTime, UploadCombineImageTakesTime: uploadCombineImageTakesTime, }, diff --git a/server/websocket/internal/logic/ws_render_image.go b/server/websocket/internal/logic/ws_render_image.go index 14b6d48b..dea2895c 100644 --- a/server/websocket/internal/logic/ws_render_image.go +++ b/server/websocket/internal/logic/ws_render_image.go @@ -229,7 +229,13 @@ func (w *wsConnectItem) renderImage(renderImageData websocket_data.RenderImageRe } res, err := w.logic.svcCtx.Repositories.ImageHandle.LogoCombine(w.logic.ctx, &combineReq) if err != nil { + //发送渲染错误消息 w.renderErrResponse(renderImageData.RequestId, renderImageData.RenderData.TemplateTag, "", "合成刀版图失败:"+err.Error(), renderImageData.RenderData.ProductId, w.userId, w.guestId, productTemplate.Id, model3dInfo.Id, productSize.Id, *productTemplate.ElementModelId) + //发送给前端重发消息 + w.requestResendRenderResponse(websocket_data.RequestBrowserResendRenderEvent{ + RequestId: renderImageData.RequestId, + Description: "combine require resend", + }) //统计合图失败数 increaseCombineRequestErrorCount(w.userId, w.guestId) logx.Error("合成刀版图失败,合成请求数据:", combineReq, "错误信息:", err) diff --git a/utils/websocket_data/render_data.go b/utils/websocket_data/render_data.go index 8d0a8136..22ac1cb3 100644 --- a/utils/websocket_data/render_data.go +++ b/utils/websocket_data/render_data.go @@ -39,12 +39,12 @@ type RenderProcessTime struct { // 合图返回数据 type CombineImageRspMsg struct { - RequestId string `json:"request_id"` - CombineImage string `json:"combine_image"` //刀版图 - SizeId int64 `json:"size_id"` //尺寸id - ModelId int64 `json:"model_id"` - TemplateId int64 `json:"template_id"` - CombineProcessTime CombineProcessTime `json:"combine_process_time"` + RequestId string `json:"request_id"` + CombineImage string `json:"combine_image"` //刀版图 + SizeId int64 `json:"size_id"` //尺寸id + ModelId int64 `json:"model_id"` + TemplateId int64 `json:"template_id"` + CombineProcessTime *CombineProcessTime `json:"combine_process_time"` } type CombineProcessTime struct { CombineTakesTime string `json:"combine_takes_time"` //合图时间 @@ -71,3 +71,9 @@ type ToUnityIdStruct struct { UserId int64 `json:"user_id"` GuestId int64 `json:"guest_id"` } + +// 要求前端重发渲染消息事件结构 +type RequestBrowserResendRenderEvent struct { + RequestId string `json:"request_id"` + Description string `json:"description"` +}