147 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			147 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package logic
 | |
| 
 | |
| import (
 | |
| 	"encoding/json"
 | |
| 	"errors"
 | |
| 	"fmt"
 | |
| 	"fusenapi/constants"
 | |
| 	"fusenapi/utils/auth"
 | |
| 	"fusenapi/utils/basic"
 | |
| 	"gorm.io/gorm"
 | |
| 	"strings"
 | |
| 
 | |
| 	"context"
 | |
| 
 | |
| 	"fusenapi/server/product/internal/svc"
 | |
| 	"fusenapi/server/product/internal/types"
 | |
| 
 | |
| 	"github.com/zeromicro/go-zero/core/logx"
 | |
| )
 | |
| 
 | |
| type GetTemplateByPidLogic struct {
 | |
| 	logx.Logger
 | |
| 	ctx    context.Context
 | |
| 	svcCtx *svc.ServiceContext
 | |
| }
 | |
| 
 | |
| func NewGetTemplateByPidLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetTemplateByPidLogic {
 | |
| 	return &GetTemplateByPidLogic{
 | |
| 		Logger: logx.WithContext(ctx),
 | |
| 		ctx:    ctx,
 | |
| 		svcCtx: svcCtx,
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func (l *GetTemplateByPidLogic) GetTemplateByPid(req *types.GetTemplateByPidReq, userinfo *auth.UserInfo) (resp *basic.Response) {
 | |
| 	req.Pid = strings.Trim(req.Pid, " ")
 | |
| 	if req.Pid == "" {
 | |
| 		return resp.SetStatusWithMessage(basic.CodeRequestParamsErr, "err param:pid is empty")
 | |
| 	}
 | |
| 	if req.TemplateTag == "" {
 | |
| 		return resp.SetStatusWithMessage(basic.CodeRequestParamsErr, "err param:template_tag")
 | |
| 	}
 | |
| 	//获取产品信息(只获取id)
 | |
| 	productInfo, err := l.svcCtx.AllModels.FsProduct.FindOneBySn(l.ctx, req.Pid, "id")
 | |
| 	if err != nil {
 | |
| 		if errors.Is(err, gorm.ErrRecordNotFound) {
 | |
| 			return resp.SetStatusWithMessage(basic.CodeDbRecordNotFoundErr, "the product is not exists")
 | |
| 		}
 | |
| 		logx.Error(err)
 | |
| 		return resp.SetStatusWithMessage(basic.CodeDbSqlErr, "failed to get product info")
 | |
| 	}
 | |
| 	//没有指定物料
 | |
| 	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获取模型
 | |
| 	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")
 | |
| 	}
 | |
| 	if len(modelList) == 0 {
 | |
| 		return resp.SetStatusWithMessage(basic.CodeDbSqlErr, "model list is empty")
 | |
| 	}
 | |
| 	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
 | |
| 	}
 | |
| 	//查询模型ids下对应tag标签的模板
 | |
| 	templateList, err := l.svcCtx.AllModels.FsProductTemplateV2.FindAllByModelIdsTemplateTag(l.ctx, modelIds, req.TemplateTag, "")
 | |
| 	if err != nil {
 | |
| 		logx.Error(err)
 | |
| 		return resp.SetStatusWithMessage(basic.CodeDbSqlErr, "failed to get template list")
 | |
| 	}
 | |
| 	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{}
 | |
| 		if err = json.Unmarshal([]byte(*templateInfo.TemplateInfo), &info); err != nil {
 | |
| 			logx.Error(err)
 | |
| 			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)
 | |
| 		}*/
 | |
| 		modelInfo := modelList[modelIndex]
 | |
| 		mapKey := fmt.Sprintf("_%d", *modelInfo.SizeId)
 | |
| 		rsp[mapKey] = map[string]interface{}{
 | |
| 			"id":       templateInfo.Id,
 | |
| 			"material": *templateInfo.MaterialImg,
 | |
| 			//写死的数据
 | |
| 			"material_data": map[string]interface{}{
 | |
| 				"QRcode": map[string]interface{}{
 | |
| 					"if_show":       true,
 | |
| 					"text":          "qrcode",
 | |
| 					"default_value": "default qrcode",
 | |
| 				},
 | |
| 				"Website": map[string]interface{}{
 | |
| 					"if_show":       true,
 | |
| 					"text":          "website",
 | |
| 					"default_value": "default website",
 | |
| 				},
 | |
| 				"Address": map[string]interface{}{
 | |
| 					"if_show":       true,
 | |
| 					"text":          "address",
 | |
| 					"default_value": "default address",
 | |
| 				},
 | |
| 				"Phone": map[string]interface{}{
 | |
| 					"if_show":       true,
 | |
| 					"text":          "phone",
 | |
| 					"default_value": "17557283679",
 | |
| 				},
 | |
| 				"Logo": map[string]interface{}{
 | |
| 					"material": "/image/logo/aHnT1_rzubdwax_scale.png",
 | |
| 				},
 | |
| 			},
 | |
| 		}
 | |
| 	}
 | |
| 	return resp.SetStatusWithMessage(basic.CodeOK, "success", rsp)
 | |
| }
 |