111 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package logic
 | ||
| 
 | ||
| import (
 | ||
| 	"context"
 | ||
| 	"encoding/json"
 | ||
| 	"errors"
 | ||
| 	"fusenapi/constants"
 | ||
| 	"fusenapi/utils/auth"
 | ||
| 	"fusenapi/utils/basic"
 | ||
| 	"gorm.io/gorm"
 | ||
| 
 | ||
| 	"fusenapi/server/product/internal/svc"
 | ||
| 	"fusenapi/server/product/internal/types"
 | ||
| 
 | ||
| 	"github.com/zeromicro/go-zero/core/logx"
 | ||
| )
 | ||
| 
 | ||
| type GetLastProductDesignLogic struct {
 | ||
| 	logx.Logger
 | ||
| 	ctx    context.Context
 | ||
| 	svcCtx *svc.ServiceContext
 | ||
| }
 | ||
| 
 | ||
| func NewGetLastProductDesignLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetLastProductDesignLogic {
 | ||
| 	return &GetLastProductDesignLogic{
 | ||
| 		Logger: logx.WithContext(ctx),
 | ||
| 		ctx:    ctx,
 | ||
| 		svcCtx: svcCtx,
 | ||
| 	}
 | ||
| }
 | ||
| 
 | ||
| func (l *GetLastProductDesignLogic) GetLastProductDesign(req *types.Request, userinfo *auth.UserInfo) (resp *basic.Response) {
 | ||
| 	if !userinfo.IsUser() {
 | ||
| 		return resp.SetStatusAddMessage(basic.CodeUnAuth, "please login")
 | ||
| 	}
 | ||
| 	//获取用户信息
 | ||
| 	user, err := l.svcCtx.AllModels.FsUser.FindUserById(l.ctx, userinfo.UserId)
 | ||
| 	if err != nil {
 | ||
| 		if errors.Is(err, gorm.ErrRecordNotFound) {
 | ||
| 			return resp.SetStatusWithMessage(basic.CodeUnAuth, "user not found")
 | ||
| 		}
 | ||
| 		logx.Error(err)
 | ||
| 		return resp.SetStatusWithMessage(basic.CodeDbSqlErr, "failed to get user info")
 | ||
| 	}
 | ||
| 	//若没打开了个性化渲染按钮
 | ||
| 	if *user.IsOpenRender != 1 {
 | ||
| 		return resp.SetStatusWithMessage(basic.CodeOK, "success:IsOpenRender switch is closed")
 | ||
| 	}
 | ||
| 	//查询用户最近下单成功的数据
 | ||
| 	orderInfo, err := l.svcCtx.AllModels.FsOrder.FindLastSuccessOneOrder(l.ctx, user.Id, int64(constants.STATUS_NEW_NOT_PAY))
 | ||
| 	if err != nil {
 | ||
| 		if errors.Is(err, gorm.ErrRecordNotFound) {
 | ||
| 			return resp.SetStatusWithMessage(basic.CodeDbRecordNotFoundErr, "none of order is found")
 | ||
| 		}
 | ||
| 		logx.Error(err)
 | ||
| 		return resp.SetStatusAddMessage(basic.CodeDbSqlErr, "failed to get your last order")
 | ||
| 	}
 | ||
| 	//获取该订单相关设计信息
 | ||
| 	orderDetail, err := l.svcCtx.AllModels.FsOrderDetail.GetOneOrderDetailByOrderId(l.ctx, orderInfo.Id)
 | ||
| 	if err != nil {
 | ||
| 		if errors.Is(err, gorm.ErrRecordNotFound) {
 | ||
| 			return resp.SetStatusWithMessage(basic.CodeDbRecordNotFoundErr, "order detail is not found")
 | ||
| 		}
 | ||
| 		logx.Error(err)
 | ||
| 		return resp.SetStatusAddMessage(basic.CodeDbSqlErr, "failed to get order detail")
 | ||
| 	}
 | ||
| 	//获取设计模板详情,便于获得design_id
 | ||
| 	orderDetailTemplate, err := l.svcCtx.AllModels.FsOrderDetailTemplate.FindOne(l.ctx, *orderDetail.OrderDetailTemplateId)
 | ||
| 	if err != nil {
 | ||
| 		if errors.Is(err, gorm.ErrRecordNotFound) {
 | ||
| 			return resp.SetStatusWithMessage(basic.CodeDbRecordNotFoundErr, "order detail template is not found")
 | ||
| 		}
 | ||
| 		logx.Error(err)
 | ||
| 		return resp.SetStatusWithMessage(basic.CodeDbSqlErr, "failed to get order detail template")
 | ||
| 	}
 | ||
| 	//最后一次设计不存在,则不返回该设计相关数据
 | ||
| 	if *orderDetailTemplate.DesignId <= 0 {
 | ||
| 		return resp.SetStatusWithMessage(basic.CodeOK, "success:last design id is not set")
 | ||
| 	}
 | ||
| 	//获取设计数据
 | ||
| 	productDesign, err := l.svcCtx.AllModels.FsProductDesign.FindOne(l.ctx, *orderDetailTemplate.DesignId, user.Id)
 | ||
| 	if err != nil {
 | ||
| 		if errors.Is(err, gorm.ErrRecordNotFound) {
 | ||
| 			return resp.SetStatusWithMessage(basic.CodeDbRecordNotFoundErr, "product design is not found")
 | ||
| 		}
 | ||
| 		logx.Error(err)
 | ||
| 		return resp.SetStatusWithMessage(basic.CodeDbSqlErr, "failed to get product design")
 | ||
| 	}
 | ||
| 	var info interface{}
 | ||
| 	if productDesign.Info != nil && *productDesign.Info != "" {
 | ||
| 		if err := json.Unmarshal([]byte(*productDesign.Info), &info); err != nil {
 | ||
| 			logx.Error(err)
 | ||
| 			return nil
 | ||
| 		}
 | ||
| 	}
 | ||
| 	var logoColor interface{}
 | ||
| 	if productDesign.LogoColor != nil && *productDesign.LogoColor != "" {
 | ||
| 		if err := json.Unmarshal([]byte(*productDesign.LogoColor), &logoColor); err != nil {
 | ||
| 			logx.Error(err)
 | ||
| 			return nil
 | ||
| 		}
 | ||
| 	}
 | ||
| 	return resp.SetStatusWithMessage(basic.CodeOK, "success", types.GetLastProductDesignRsp{
 | ||
| 		Id:         productDesign.Id,
 | ||
| 		OptionalId: *productDesign.OptionalId,
 | ||
| 		SizeId:     *productDesign.SizeId,
 | ||
| 		LogoColor:  logoColor,
 | ||
| 		Info:       info,
 | ||
| 	})
 | ||
| }
 |