| 
									
										
										
										
											2023-06-19 10:34:21 +08:00
										 |  |  | package logic | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							| 
									
										
										
										
											2023-06-20 17:28:28 +08:00
										 |  |  | 	"errors" | 
					
						
							| 
									
										
										
										
											2023-06-19 12:23:02 +08:00
										 |  |  | 	"fusenapi/model/gmodel" | 
					
						
							| 
									
										
										
										
											2023-06-19 10:34:21 +08:00
										 |  |  | 	"fusenapi/utils/auth" | 
					
						
							|  |  |  | 	"fusenapi/utils/basic" | 
					
						
							| 
									
										
										
										
											2023-06-20 17:28:28 +08:00
										 |  |  | 	"gorm.io/gorm" | 
					
						
							| 
									
										
										
										
											2023-06-19 10:34:21 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	"context" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"fusenapi/server/product/internal/svc" | 
					
						
							|  |  |  | 	"fusenapi/server/product/internal/types" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/zeromicro/go-zero/core/logx" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type GetProductDesignLogic struct { | 
					
						
							|  |  |  | 	logx.Logger | 
					
						
							|  |  |  | 	ctx    context.Context | 
					
						
							|  |  |  | 	svcCtx *svc.ServiceContext | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func NewGetProductDesignLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetProductDesignLogic { | 
					
						
							|  |  |  | 	return &GetProductDesignLogic{ | 
					
						
							|  |  |  | 		Logger: logx.WithContext(ctx), | 
					
						
							|  |  |  | 		ctx:    ctx, | 
					
						
							|  |  |  | 		svcCtx: svcCtx, | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-19 12:23:02 +08:00
										 |  |  | func (l *GetProductDesignLogic) GetProductDesign(req *types.GetProductDesignReq, userinfo *auth.UserInfo) (resp *basic.Response) { | 
					
						
							|  |  |  | 	if userinfo.GetIdType() != auth.IDTYPE_User { | 
					
						
							|  |  |  | 		return resp.SetStatusWithMessage(basic.CodeUnAuth, "please login first") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if req.Sn == "" { | 
					
						
							|  |  |  | 		return resp.SetStatusWithMessage(basic.CodeRequestParamsErr, "param sn is required") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	//获取设计数据 | 
					
						
							|  |  |  | 	productDesignModel := gmodel.NewFsProductDesignModel(l.svcCtx.MysqlConn) | 
					
						
							|  |  |  | 	designInfo, err := productDesignModel.FindOneBySn(l.ctx, req.Sn, userinfo.UserId) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							| 
									
										
										
										
											2023-06-20 17:28:28 +08:00
										 |  |  | 		if errors.Is(err, gorm.ErrRecordNotFound) { | 
					
						
							|  |  |  | 			return resp.SetStatusWithMessage(basic.CodeDbRecordNotFoundErr, "design info is not exists") | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2023-06-19 12:23:02 +08:00
										 |  |  | 		logx.Error(err) | 
					
						
							|  |  |  | 		return resp.SetStatusWithMessage(basic.CodeServiceErr, "failed to get design info") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	//获取产品尺寸信息 | 
					
						
							|  |  |  | 	productSizeModel := gmodel.NewFsProductSizeModel(l.svcCtx.MysqlConn) | 
					
						
							|  |  |  | 	sizeInfo, err := productSizeModel.FindOne(l.ctx, *designInfo.SizeId) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							| 
									
										
										
										
											2023-06-20 17:28:28 +08:00
										 |  |  | 		if errors.Is(err, gorm.ErrRecordNotFound) { | 
					
						
							|  |  |  | 			return resp.SetStatusWithMessage(basic.CodeServiceErr, "product size info is not exists") | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2023-06-19 12:23:02 +08:00
										 |  |  | 		logx.Error(err) | 
					
						
							|  |  |  | 		return resp.SetStatusWithMessage(basic.CodeServiceErr, "failed to get product size info") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	//获取模板信息 | 
					
						
							|  |  |  | 	productTemplateV2Model := gmodel.NewFsProductTemplateV2Model(l.svcCtx.MysqlConn) | 
					
						
							|  |  |  | 	productTemplateV2Info, err := productTemplateV2Model.FindOne(l.ctx, *designInfo.TemplateId) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							| 
									
										
										
										
											2023-06-20 17:28:28 +08:00
										 |  |  | 		if errors.Is(err, gorm.ErrRecordNotFound) { | 
					
						
							|  |  |  | 			return resp.SetStatusWithMessage(basic.CodeDbRecordNotFoundErr, "template info is not exists") | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2023-06-19 12:23:02 +08:00
										 |  |  | 		logx.Error(err) | 
					
						
							|  |  |  | 		return resp.SetStatusWithMessage(basic.CodeServiceErr, "failed to get template info") | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2023-06-19 14:47:54 +08:00
										 |  |  | 	//获取产品模型信息 | 
					
						
							|  |  |  | 	productModel3dModel := gmodel.NewFsProductModel3dModel(l.svcCtx.MysqlConn) | 
					
						
							|  |  |  | 	model3dInfo, err := productModel3dModel.FindOne(l.ctx, *designInfo.OptionalId) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							| 
									
										
										
										
											2023-06-20 17:28:28 +08:00
										 |  |  | 		if errors.Is(err, gorm.ErrRecordNotFound) { | 
					
						
							|  |  |  | 			return resp.SetStatusWithMessage(basic.CodeDbRecordNotFoundErr, "product 3D model info is not exists") | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2023-06-19 12:23:02 +08:00
										 |  |  | 		logx.Error(err) | 
					
						
							| 
									
										
										
										
											2023-06-19 14:47:54 +08:00
										 |  |  | 		return resp.SetStatusWithMessage(basic.CodeServiceErr, "failed to get product 3D model info") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	optionalId := *designInfo.OptionalId | 
					
						
							|  |  |  | 	if *model3dInfo.Status == 0 && *sizeInfo.Status == 1 && *productTemplateV2Info.Status == 1 && *productTemplateV2Info.IsDel == 0 { | 
					
						
							|  |  |  | 		optionalId = 0 | 
					
						
							| 
									
										
										
										
											2023-06-19 12:23:02 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2023-06-19 14:47:54 +08:00
										 |  |  | 	return resp.SetStatusWithMessage(basic.CodeOK, "success", types.GetProductDesignRsp{ | 
					
						
							|  |  |  | 		ProductId:  *designInfo.ProductId, | 
					
						
							|  |  |  | 		TemplateId: *designInfo.TemplateId, | 
					
						
							| 
									
										
										
										
											2023-07-05 16:58:16 +08:00
										 |  |  | 		//MaterialId: *designInfo.MaterialId, | 
					
						
							| 
									
										
										
										
											2023-06-19 14:47:54 +08:00
										 |  |  | 		SizeId:     *designInfo.SizeId, | 
					
						
							|  |  |  | 		OptionalId: optionalId, | 
					
						
							|  |  |  | 		Cover:      *designInfo.Cover, | 
					
						
							|  |  |  | 		Info:       *designInfo.Info, | 
					
						
							|  |  |  | 	}) | 
					
						
							| 
									
										
										
										
											2023-06-19 10:34:21 +08:00
										 |  |  | } |