| 
									
										
										
										
											2023-06-30 17:20:11 +08:00
										 |  |  | package logic | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"context" | 
					
						
							|  |  |  | 	"encoding/json" | 
					
						
							|  |  |  | 	"errors" | 
					
						
							|  |  |  | 	"fusenapi/model/gmodel" | 
					
						
							|  |  |  | 	"fusenapi/server/product/internal/svc" | 
					
						
							|  |  |  | 	"fusenapi/server/product/internal/types" | 
					
						
							|  |  |  | 	"fusenapi/utils/auth" | 
					
						
							|  |  |  | 	"fusenapi/utils/basic" | 
					
						
							|  |  |  | 	"fusenapi/utils/encryption_decryption" | 
					
						
							|  |  |  | 	"fusenapi/utils/id_generator" | 
					
						
							|  |  |  | 	"fusenapi/utils/ip" | 
					
						
							|  |  |  | 	"net/http" | 
					
						
							|  |  |  | 	"time" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-07-21 15:20:18 +08:00
										 |  |  | 	"gorm.io/gorm" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-30 17:20:11 +08:00
										 |  |  | 	"github.com/zeromicro/go-zero/core/logx" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type DesignGatherLogic struct { | 
					
						
							|  |  |  | 	logx.Logger | 
					
						
							|  |  |  | 	ctx    context.Context | 
					
						
							|  |  |  | 	svcCtx *svc.ServiceContext | 
					
						
							| 
									
										
										
										
											2023-07-21 15:20:18 +08:00
										 |  |  | 	ipAddr string | 
					
						
							| 
									
										
										
										
											2023-06-30 17:20:11 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func NewDesignGatherLogic(ctx context.Context, svcCtx *svc.ServiceContext) *DesignGatherLogic { | 
					
						
							|  |  |  | 	return &DesignGatherLogic{ | 
					
						
							|  |  |  | 		Logger: logx.WithContext(ctx), | 
					
						
							|  |  |  | 		ctx:    ctx, | 
					
						
							|  |  |  | 		svcCtx: svcCtx, | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-07-21 15:20:18 +08:00
										 |  |  | // 处理进入前逻辑w,r | 
					
						
							|  |  |  | func (l *DesignGatherLogic) BeforeLogic(w http.ResponseWriter, r *http.Request) { | 
					
						
							|  |  |  | 	//获取ip地址 | 
					
						
							|  |  |  | 	ipAddr, err := ip.GetClientIP(r) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		logx.Error(err) | 
					
						
							|  |  |  | 		return | 
					
						
							|  |  |  | 		// return resp.SetStatusWithMessage(basic.CodeServiceErr, "client ip is not available") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	l.ipAddr = ipAddr | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (l *DesignGatherLogic) DesignGather(req *types.DesignGatherReq, userinfo *auth.UserInfo) (resp *basic.Response) { | 
					
						
							|  |  |  | 	if l.ipAddr == "" { | 
					
						
							|  |  |  | 		return resp.SetStatusWithMessage(basic.CodeServiceErr, "client ip is not available") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-30 17:20:11 +08:00
										 |  |  | 	encryptWebsetting, err := l.svcCtx.AllModels.FsWebSet.FindValueByKey(l.ctx, "is_encrypt") | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		if errors.Is(err, gorm.ErrRecordNotFound) { | 
					
						
							|  |  |  | 			return resp.SetStatusWithMessage(basic.CodeDbRecordNotFoundErr, "web setting is_encrypt is not exists") | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		logx.Error(err) | 
					
						
							|  |  |  | 		return resp.SetStatusWithMessage(basic.CodeDbSqlErr, "failed to get web setting") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	var postInfo map[string]interface{} | 
					
						
							|  |  |  | 	//不加密 | 
					
						
							|  |  |  | 	if encryptWebsetting.Value == nil || *encryptWebsetting.Value == "0" { | 
					
						
							|  |  |  | 		if err = json.Unmarshal([]byte(req.Data), &postInfo); err != nil { | 
					
						
							|  |  |  | 			return resp.SetStatusWithMessage(basic.CodeJsonErr, "failed to parse json data,format may be invalid") | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} else { //加密的 | 
					
						
							|  |  |  | 		//解密数据 | 
					
						
							|  |  |  | 		desData, err := encryption_decryption.CBCDecrypt(req.Data) | 
					
						
							|  |  |  | 		if err != nil { | 
					
						
							|  |  |  | 			logx.Error(err) | 
					
						
							|  |  |  | 			return resp.SetStatusWithMessage(basic.CodeAesCbcDecryptionErr, "failed to decryption data") | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		if err = json.Unmarshal([]byte(desData), &postInfo); err != nil { | 
					
						
							|  |  |  | 			logx.Error(err) | 
					
						
							|  |  |  | 			return resp.SetStatusWithMessage(basic.CodeJsonErr, "failed to parse json data,format may be invalid") | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2023-07-21 15:20:18 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-30 17:20:11 +08:00
										 |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		logx.Error(err) | 
					
						
							|  |  |  | 		return resp.SetStatusWithMessage(basic.CodeServiceErr, "client ip is not available") | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2023-07-21 15:20:18 +08:00
										 |  |  | 	postInfo["client_ip"] = l.ipAddr | 
					
						
							| 
									
										
										
										
											2023-06-30 17:20:11 +08:00
										 |  |  | 	var ( | 
					
						
							|  |  |  | 		optionalId int64 | 
					
						
							|  |  |  | 		sizeId     int64 | 
					
						
							|  |  |  | 		productId  int64 | 
					
						
							|  |  |  | 		templateId int64 | 
					
						
							|  |  |  | 		materialId int64 | 
					
						
							|  |  |  | 		cover      string | 
					
						
							|  |  |  | 		info       string | 
					
						
							|  |  |  | 		clientNo   string | 
					
						
							|  |  |  | 	) | 
					
						
							|  |  |  | 	//校验数据 | 
					
						
							|  |  |  | 	if _, ok := postInfo["optional_id"].(float64); !ok { | 
					
						
							|  |  |  | 		return resp.SetStatusWithMessage(basic.CodeRequestParamsErr, "invalid param optional_id") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	optionalId = int64(postInfo["optional_id"].(float64)) | 
					
						
							|  |  |  | 	if _, ok := postInfo["size_id"].(float64); !ok { | 
					
						
							|  |  |  | 		return resp.SetStatusWithMessage(basic.CodeRequestParamsErr, "invalid param size_id") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	sizeId = int64(postInfo["size_id"].(float64)) | 
					
						
							|  |  |  | 	if _, ok := postInfo["product_id"].(float64); !ok { | 
					
						
							|  |  |  | 		return resp.SetStatusWithMessage(basic.CodeRequestParamsErr, "invalid param product_id") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	productId = int64(postInfo["product_id"].(float64)) | 
					
						
							|  |  |  | 	if _, ok := postInfo["template_id"].(float64); !ok { | 
					
						
							|  |  |  | 		return resp.SetStatusWithMessage(basic.CodeRequestParamsErr, "invalid param template_id") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	templateId = int64(postInfo["template_id"].(float64)) | 
					
						
							|  |  |  | 	if _, ok := postInfo["material_id"].(float64); !ok { | 
					
						
							|  |  |  | 		return resp.SetStatusWithMessage(basic.CodeRequestParamsErr, "invalid param material_id") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	materialId = int64(postInfo["material_id"].(float64)) | 
					
						
							|  |  |  | 	if _, ok := postInfo["client_no"].(string); !ok { | 
					
						
							|  |  |  | 		return resp.SetStatusWithMessage(basic.CodeRequestParamsErr, "invalid param client_no") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	clientNo = postInfo["client_no"].(string) | 
					
						
							|  |  |  | 	if postInfo["info"] == nil { | 
					
						
							|  |  |  | 		info = "" | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		jsonInfoBytes, _ := json.Marshal(postInfo["info"]) | 
					
						
							|  |  |  | 		info = string(jsonInfoBytes) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if postInfo["cover"] != nil { | 
					
						
							|  |  |  | 		cover = postInfo["cover"].(string) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	//保存数据 | 
					
						
							|  |  |  | 	designSn, err := id_generator.GenSnowFlakeId() | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		logx.Error(err) | 
					
						
							|  |  |  | 		return resp.SetStatusWithMessage(basic.CodeServiceErr, "failed to generate design sn") | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2023-08-28 14:21:06 +08:00
										 |  |  | 	now := time.Now().UTC().Unix() | 
					
						
							| 
									
										
										
										
											2023-06-30 17:20:11 +08:00
										 |  |  | 	err = l.svcCtx.AllModels.FsProductDesignGather.Create(l.ctx, &gmodel.FsProductDesignGather{ | 
					
						
							|  |  |  | 		Sn:         &designSn, | 
					
						
							|  |  |  | 		UserId:     &userinfo.UserId, | 
					
						
							|  |  |  | 		ProductId:  &productId, | 
					
						
							|  |  |  | 		TemplateId: &templateId, | 
					
						
							|  |  |  | 		MaterialId: &materialId, | 
					
						
							|  |  |  | 		SizeId:     &sizeId, | 
					
						
							|  |  |  | 		OptionalId: &optionalId, | 
					
						
							|  |  |  | 		Cover:      &cover, | 
					
						
							|  |  |  | 		Info:       &info, | 
					
						
							|  |  |  | 		Utime:      &now, | 
					
						
							| 
									
										
										
										
											2023-07-21 15:20:18 +08:00
										 |  |  | 		ClientIp:   &l.ipAddr, | 
					
						
							| 
									
										
										
										
											2023-06-30 17:20:11 +08:00
										 |  |  | 		ClientNo:   &clientNo, | 
					
						
							|  |  |  | 	}) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		logx.Error(err) | 
					
						
							|  |  |  | 		return resp.SetStatusWithMessage(basic.CodeSaveErr, "failed to save data") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return resp.SetStatusWithMessage(basic.CodeOK, "success", types.DesignGatherRsp{ | 
					
						
							|  |  |  | 		Sn: designSn, | 
					
						
							|  |  |  | 	}) | 
					
						
							|  |  |  | } |