kobe6258 4 сар өмнө
parent
commit
af16f4f363

+ 154 - 81
controllers/product.go

@@ -553,84 +553,157 @@ func (this *ProductController) ProductRisk() {
 	br.Msg = "获取成功"
 }
 
-//
-//// OnSale @Title 上架产品
-//// @Description 上架产品
-//// @Param   File   query   file  true       "文件"
-//// @Success 200 {object} models.ReportAuthorResp
-//// @router /onSale [post]
-//func (this *ProductController) OnSale() {
-//	br := new(models.BaseResponse).Init()
-//	defer func() {
-//		this.Data["json"] = br
-//		this.ServeJSON()
-//	}()
-//	f, h, err := this.GetFile("File")
-//	if err != nil {
-//		br.Msg = "获取资源信息失败"
-//		br.ErrMsg = "获取资源信息失败,Err:" + err.Error()
-//		return
-//	}
-//	defer f.Close()
-//	size, err := strconv.Atoi(utils.UPLOAD_IMG_SIZE)
-//	if err != nil {
-//		size = 100
-//	}
-//	if h.Size > 1024*1024*int64(size) {
-//		br.Msg = fmt.Sprintf("图片大小不能超过%dK", size)
-//		br.ErrMsg = "图片上传失败,Err:" + err.Error()
-//		return
-//	}
-//	ext := path.Ext(h.Filename)
-//	//if ext != ".mp3" {
-//	//	br.Msg = "音频格式不正确"
-//	//	br.ErrMsg = "音频上传失败,Err:" + err.Error()
-//	//	return
-//	//}
-//	dateDir := time.Now().Format("20060102")
-//	uploadDir := utils.STATIC_DIR + "ht/audio" + dateDir
-//	err = os.MkdirAll(uploadDir, utils.DIR_MOD)
-//	if err != nil {
-//		br.Msg = "存储目录创建失败"
-//		br.ErrMsg = "存储目录创建失败,Err:" + err.Error()
-//		return
-//	}
-//	randStr := utils.GetRandStringNoSpecialChar(28)
-//	fileName := randStr + ext
-//	fpath := uploadDir + "/" + fileName
-//	err = this.SaveToFile("File", fpath)
-//	if err != nil {
-//		br.Msg = "图片上传失败"
-//		br.ErrMsg = "图片上传失败,Err:" + err.Error()
-//		return
-//	}
-//	audioUploadDir := utils.RESOURCE_DIR + "img/"
-//	savePdfToOssPath := audioUploadDir + time.Now().Format("200601/20060102/")
-//	audioName := utils.GetRandStringNoSpecialChar(28)
-//	savePdfToOssPath += audioName + ext
-//
-//	defer func() {
-//		err = os.Remove(fpath)
-//		fmt.Sprintf("删除文件失败:%v", err)
-//	}()
-//	ossClient := services.NewOssClient()
-//	if ossClient == nil {
-//		br.Msg = "图片上传失败"
-//		br.ErrMsg = "初始化OSS服务失败"
-//		return
-//	}
-//	mp3Url, err := ossClient.UploadFile("", fpath, savePdfToOssPath)
-//	if err != nil {
-//		br.Msg = "图片上传失败"
-//		br.ErrMsg = "图片上传失败,Err:" + err.Error()
-//		return
-//	}
-//	base := path.Base(h.Filename)
-//	resp := new(response.MediaUploadResp)
-//	resp.Url = mp3Url
-//	resp.FileName = base
-//	br.Data = resp
-//	br.Msg = "上架成功"
-//	br.Ret = 200
-//	br.Success = true
-//}
+// EditProduct @Title 编辑产品
+// @Description 编辑产品
+// @Param   File   query   file  true       "文件"
+// @Success 200 {object} models.ReportAuthorResp
+// @router /editProduct [post]
+func (this *ProductController) EditProduct() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	var req request.ProductReq
+	var permissionName string
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+
+	var product models.MerchantProduct
+	if req.Type == "package" {
+		if req.ValidDays <= 0 {
+			br.Msg = "套餐有效期非法"
+			br.ErrMsg = "套餐有效期非法,天数不能是负数"
+			return
+		}
+		if req.ProductName == "" {
+			br.Msg = "套餐名称不能为空"
+			br.ErrMsg = "套餐名称不能为空"
+			return
+		}
+		product.Title = req.ProductName
+		product.ValidDays = req.ValidDays
+		product.Description = req.Description
+		if req.CoverSrc == "" {
+			var imageList []models.ImageSource
+			imageList, err = models.GetImageByPermissionId(req.SourceId)
+			if err != nil {
+				utils.FileLog.Error("套餐封面获取失败", err.Error())
+				//br.Msg = "默认套餐封面获取失败,请上传封面"
+				//br.ErrMsg = "默认套餐封面获取失败,请上传封面,Err:" + err.Error()
+				//return
+			} else {
+				var rnd = rand.New(rand.NewSource(time.Now().UnixNano()))
+				index := rnd.Intn(len(imageList))
+				product.CoverSrc = imageList[index].SrcUrl
+			}
+		} else {
+			product.CoverSrc = req.CoverSrc
+		}
+
+	}
+	switch req.Type {
+	case "report":
+		product.RiskLevel, product.Title, err = services.GetRiskLevel("report", req.SourceId)
+	case "audio":
+		product.RiskLevel, product.Title, err = services.GetRiskLevel("audio", req.SourceId)
+	case "video":
+		product.RiskLevel, product.Title, err = services.GetRiskLevel("video", req.SourceId)
+	case "package":
+		product.RiskLevel, permissionName, err = services.GetRiskLevel("package", req.SourceId)
+	default:
+		br.Msg = "产品类型错误"
+		br.ErrMsg = "获取产品列表失败,Err:产品类型错误"
+		return
+	}
+
+	if err != nil {
+		utils.FileLog.Error("新增单品失败", err.Error())
+		br.Msg = "新增产品错误"
+		if strings.Contains(err.Error(), "<QuerySeter> no row found") {
+			br.Msg = "新增产品错误,产品信息不存在"
+		} else {
+			br.Msg = "新增产品错误" + err.Error()
+		}
+		return
+	}
+	if product.RiskLevel == "" {
+		br.Msg = "新增产品错误"
+		br.ErrMsg = "未获取到风险等级"
+		return
+	}
+	if !checkProductRiskLevel(product.RiskLevel) {
+		br.Msg = "产品风险等级不合法"
+		br.ErrMsg = "产品风险等级不合法:" + product.RiskLevel
+		return
+	}
+	if product.Title == "" {
+		br.Msg = "产品名称不能为空"
+		br.ErrMsg = "产品名称不能为空"
+		return
+	}
+	var price decimal.Decimal
+	price, err = decimal.NewFromString(req.Price)
+	if err != nil {
+		br.Msg = "产品价格格式不正确"
+		br.ErrMsg = "产品价格格式不正确,err:" + err.Error() + "price:" + product.Price
+		return
+	}
+	if price.Cmp(decimal.New(0, 0)) <= 0 {
+		br.Msg = "产品价格不能小于0"
+		br.ErrMsg = "产品价格不能小于0"
+		return
+	}
+	product.SaleStatus = models.OnSale
+	product.CreatedTime = time.Now()
+	product.Price = req.Price
+	product.SourceId = req.SourceId
+	product.Type = models.MerchantProductType(req.Type)
+	product.Creator = this.SysUser.SysRealName
+	if product.Type == "" {
+		br.Msg = "新增产品错误"
+		br.ErrMsg = "产品类型为空"
+		return
+	}
+
+	err = product.EditProduct()
+	if err != nil {
+		var mysqlErr *mysql.MySQLError
+		if errors.As(err, &mysqlErr) {
+			if mysqlErr.Number == 1062 {
+				if product.Type == models.ProductPackage {
+					var dbProduct models.MerchantProduct
+					dbProduct, err = models.GetProductByProductType(product.SourceId, models.ProductPackage)
+					if err != nil {
+						utils.FileLog.Error("获取套餐产品信息失败,err:" + err.Error())
+						br.Msg = "[" + permissionName + "]已设置付费套餐,请重新选择"
+						br.ErrMsg = "[" + permissionName + "]已设置付费套餐,请重新选择"
+					} else {
+						br.Msg = "[" + permissionName + "]已设置付费套餐[" + dbProduct.Title + "],请重新选择"
+						br.ErrMsg = "[" + permissionName + "]已设置付费套餐[" + dbProduct.Title + "],请重新选择"
+					}
+				} else {
+					br.Msg = "该产品已设置付费,请刷新后重试"
+					br.ErrMsg = "该产品已设置付费,请刷新后重试"
+				}
+			} else {
+				utils.FileLog.Error("新增产品失败,err:" + err.Error())
+				br.Msg = "新增产品失败"
+				br.ErrMsg = "新增产品失败,err:" + err.Error()
+			}
+		} else {
+			utils.FileLog.Error("新增产品失败,err:" + err.Error())
+			br.Msg = "新增产品失败"
+			br.ErrMsg = "新增产品失败,err:" + err.Error()
+		}
+		return
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "新增产品成功"
+	return
+}

+ 10 - 0
models/merchant_product.go

@@ -81,7 +81,17 @@ func (mp *MerchantProduct) AddProduct() (err error) {
 	_, err = o.Insert(mp)
 	return
 }
+func (mp *MerchantProduct) EditProduct() (err error) {
+	o := orm.NewOrm()
+	mp.UpdatedTime = time.Now()
+	if mp.Type == ProductPackage {
+		_, err = o.Update(mp, "updated_time", "risk_level", "price", "cover_src", "description", "valid_days", "title")
+	} else {
+		_, err = o.Update(mp, "updated_time", "risk_level", "price")
+	}
 
+	return
+}
 func (mp *MerchantProduct) UpdateProductSaleStatus() (err error) {
 	o := orm.NewOrm()
 	var dbProduct MerchantProduct