You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
829 lines
24 KiB
829 lines
24 KiB
package goods
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
mysql2 "git.oa00.com/go/mysql"
|
|
"github.com/golangkit/formatime"
|
|
"github.com/jinzhu/gorm"
|
|
"os"
|
|
"path/filepath"
|
|
"recook/internal/dbc"
|
|
"recook/internal/static_path"
|
|
"recook/internal/v2/lib/common"
|
|
"recook/internal/v2/model/gys/enterprise"
|
|
goods2 "recook/internal/v2/model/gys/goods"
|
|
strict "recook/internal/v2/model/http/goods"
|
|
goods3 "recook/internal/v2/model/recook/goods"
|
|
"recook/internal/v2/model/recook/manage"
|
|
"recook/tools"
|
|
"strconv"
|
|
)
|
|
|
|
var OldLogic = oldLogic{}
|
|
|
|
type oldLogic struct {
|
|
}
|
|
|
|
func (o oldLogic) List(req *strict.ArgsList) (List []strict.OldListItem, total int) {
|
|
gs := &goods2.GysGoodsInfoTempModel{}
|
|
query := dbc.DB.Table(gs.TableName())
|
|
if req.VendorID != 0 {
|
|
query = query.Where("user_id = ?", req.VendorID)
|
|
}
|
|
if req.Title != "" {
|
|
query = query.Where("title like ?", fmt.Sprintf("%%%s%%", req.Title))
|
|
}
|
|
if req.GoodsSn != "" {
|
|
query = query.Where("goods_sn like ?", fmt.Sprintf("%%%s%%", req.GoodsSn))
|
|
}
|
|
if req.BrandID != 0 {
|
|
query = query.Where("main_branid = ?", req.BrandID)
|
|
}
|
|
|
|
if req.AuditType != 0 {
|
|
query = query.Where("audit_type = ?", req.AuditType)
|
|
}
|
|
|
|
if req.AuditStatus != 0 {
|
|
query = query.Where("audit_status = ?", req.AuditStatus)
|
|
}
|
|
if req.ApplyStart != "" {
|
|
query = query.Where("push_time >= ?", req.ApplyStart)
|
|
}
|
|
|
|
if req.ApplyEnd != "" {
|
|
query = query.Where("push_time < ?", req.ApplyEnd)
|
|
}
|
|
if req.First != 0 {
|
|
query = query.Where("first_category_id = ?", req.First)
|
|
}
|
|
|
|
if req.Second != 0 {
|
|
query = query.Where("second_category_id = ?", req.Second)
|
|
}
|
|
var userList []manage.RecookManageUserInfoModel
|
|
mysql2.Db.Model(&userList).Find(&userList)
|
|
userMap := make(map[uint]manage.RecookManageUserInfoModel)
|
|
for _, v := range userList {
|
|
userMap[v.Id] = v
|
|
}
|
|
//获取审核详情
|
|
var auditDetail []goods2.GysGoodsAuditTempModel
|
|
newquery := dbc.DB.Table((&goods2.GysGoodsInfoTempModel{}).TableName()).Where("audit_type=?", req.AuditType).Where("audit_status=?", req.AuditStatus).Select("source_id").SubQuery()
|
|
dbc.DB.Table((&goods2.GysGoodsAuditTempModel{}).TableName()).Where("goods_id in(?)", newquery).Find(&auditDetail)
|
|
|
|
var temp []strict.OldListBase
|
|
query.Group("source_id").Count(&total)
|
|
query = query.Preload("BrandObj").Preload("First").Preload("Second").Preload("Cover")
|
|
query.Group("source_id").Limit(req.GetLimit()).Offset(req.GetStart())
|
|
query.Find(&temp)
|
|
|
|
for _, v := range temp {
|
|
var et enterprise.GysEnterpriseStateModel
|
|
dbc.DB.Table(et.TableName()).First(&et, "user_id = ?", v.UserId)
|
|
var cover goods2.GysGoodsMainPhotoTempModel
|
|
dbc.DB.Table(cover.TableName()).First(&cover, "goods_id = ? AND is_master = 1", v.SourceID)
|
|
|
|
info := strict.OldListItem{
|
|
GoodsID: v.SourceID,
|
|
Title: v.Title,
|
|
VendorName: et.EnterpriseName,
|
|
Cover: cover.Url,
|
|
GoodsSn: v.GoodsSn,
|
|
BrandName: v.BrandObj.Name,
|
|
ApplyTime: v.PushTime.Time.Unix(),
|
|
AuditType: v.AuditType,
|
|
AuditStatus: v.AuditStatus,
|
|
NoInfo: []strict.RejectInfo{},
|
|
CategoryName: v.First.Name,
|
|
}
|
|
for _, model := range auditDetail {
|
|
//审核类型 1=采购审核 2=设计审核 3=qc审核 4=财务审核 5=运营审核
|
|
//审核状态 1=审核中 2=审核成功 3=审核驳回
|
|
if model.AuditType == v.AuditType && model.GoodsId == v.SourceID {
|
|
info.AdminId = model.AdminId
|
|
info.AdminDate = model.CreatedAt
|
|
info.AdminUser = userMap[model.AdminId].Name
|
|
} else {
|
|
continue
|
|
}
|
|
|
|
}
|
|
|
|
var m goods2.GysGoodsAuditTempModel
|
|
subQuery := dbc.DB.Table(m.TableName()).Select("MAX(id) AS id").
|
|
Where("goods_id = ? AND audit_type = ? AND audit_status = 3", v.SourceID, req.AuditType).
|
|
Group("audit_type").SubQuery()
|
|
dbc.DB.Table(m.TableName()).Where("id IN ?", subQuery).Find(&(info.NoInfo))
|
|
List = append(List, info)
|
|
}
|
|
return
|
|
}
|
|
|
|
func (o oldLogic) Detail(req *strict.ArgsDetail) (result strict.StockResult, err error) {
|
|
now, err := o.NowDetail(req)
|
|
if err != nil {
|
|
return strict.StockResult{}, err
|
|
}
|
|
old, err := o.OldDetail(req)
|
|
if err != nil {
|
|
return strict.StockResult{}, err
|
|
}
|
|
result.Now = now
|
|
result.Old = old
|
|
return
|
|
}
|
|
|
|
func (o oldLogic) OldDetail(req *strict.ArgsDetail) (result strict.OldGoods, err error) {
|
|
var g goods2.GysGoodsInfoModel
|
|
dbc.DB.Table(g.TableName()).First(&g, "id = ?", req.GoodsID)
|
|
|
|
var cover goods2.GysGoodsMainPhotoModel
|
|
dbc.DB.Table(cover.TableName()).First(&cover, "is_master = 1 AND goods_id = ?", req.GoodsID)
|
|
|
|
var mainP []goods2.GysGoodsMainPhotoModel
|
|
dbc.DB.Model(&goods2.GysGoodsMainPhotoModel{}).Find(&mainP, "is_master = 0 AND goods_id = ?", req.GoodsID)
|
|
|
|
var detailP []goods2.GysGoodsDetailPhotoModel
|
|
dbc.DB.Model(&goods2.GysGoodsDetailPhotoModel{}).Find(&detailP, "type = 0 AND goods_id = ?", req.GoodsID)
|
|
|
|
var skuObj []goods2.GysGoodsSkuModel
|
|
dbc.DB.Model(&goods2.GysGoodsSkuModel{}).Find(&skuObj, "goods_id = ?", req.GoodsID)
|
|
|
|
var video goods2.GysGoodsVideoModel
|
|
dbc.DB.Table(video.TableName()).First(&video, "goods_id = ?", req.GoodsID)
|
|
|
|
var ifg []strict.FileGroupBase
|
|
dbc.DB.Model(&goods2.GysGoodsPhotoGroupModel{}).Preload("File").
|
|
Find(&ifg, "goods_id = ? AND type = 1", req.GoodsID)
|
|
|
|
var ofg []strict.FileGroupBase
|
|
dbc.DB.Model(&goods2.GysGoodsPhotoGroupModel{}).Preload("File").
|
|
Find(&ofg, "goods_id = ? AND type = 2", req.GoodsID)
|
|
|
|
var base strict.Base
|
|
base.GetBase(g)
|
|
|
|
result.GoodsID = g.Id
|
|
result.VendorName = base.VendorObj.EnterpriseName
|
|
result.GoodsSn = g.GoodsSn
|
|
result.First = base.First.Name
|
|
result.Second = base.Second.Name
|
|
result.BrandName = base.Brand.Name
|
|
result.Title = g.Title
|
|
result.SubTitle = g.ViceTitle
|
|
result.Material = g.Material
|
|
result.IsAbroad = g.IsAbroad
|
|
result.Storehouse = g.Storehouse
|
|
result.CountryName = base.CountryObj.Name
|
|
|
|
result.ReturnAddress = base.Address.Address
|
|
result.Cover = cover.Url
|
|
|
|
for _, v := range mainP {
|
|
result.MainPhotos = append(result.MainPhotos, v.Url)
|
|
}
|
|
|
|
for _, v := range detailP {
|
|
result.DetailPhotos = append(result.DetailPhotos, strict.FileDetail{
|
|
Name: v.Name,
|
|
Url: v.Url,
|
|
})
|
|
}
|
|
|
|
result.Video = video.Url
|
|
|
|
for _, v := range skuObj {
|
|
result.Sku = append(result.Sku, strict.Sku{
|
|
Name: v.Name,
|
|
PurchasePrice: v.PurchasePrice,
|
|
OriginalPrice: v.OriginalPrice,
|
|
DiscountPrice: v.DiscountPrice,
|
|
Inventory: v.Inventory,
|
|
Code: v.Code,
|
|
GoodsNum: v.GoodsNum,
|
|
PicUrl: v.PicUrl,
|
|
})
|
|
}
|
|
result.FreightName = base.FreightObj.GetFreightName()
|
|
fd := base.FreightObj.GetFreightDetail()
|
|
result.FreightDetail = &fd
|
|
|
|
for _, v := range ifg {
|
|
r := strict.FileGroup{
|
|
Title: v.Title,
|
|
ExpireTime: common.MyTime(v.ExpireTime.Time),
|
|
}
|
|
var fileR []strict.FileDetail
|
|
for _, k := range v.File {
|
|
fileR = append(fileR, strict.FileDetail{
|
|
Name: k.Name,
|
|
Url: k.Url,
|
|
})
|
|
}
|
|
r.File = fileR
|
|
result.InspectionReport = append(result.InspectionReport, r)
|
|
}
|
|
|
|
for _, v := range ofg {
|
|
r := strict.FileGroup{
|
|
Title: v.Title,
|
|
ExpireTime: common.MyTime(v.ExpireTime.Time),
|
|
}
|
|
var fileR []strict.FileDetail
|
|
for _, k := range v.File {
|
|
fileR = append(fileR, strict.FileDetail{
|
|
Name: k.Name,
|
|
Url: k.Url,
|
|
})
|
|
}
|
|
r.File = fileR
|
|
result.Other = append(result.Other, r)
|
|
}
|
|
return
|
|
}
|
|
|
|
func (o oldLogic) NowDetail(req *strict.ArgsDetail) (result strict.OldGoods, err error) {
|
|
var g goods2.GysGoodsInfoTempModel
|
|
dbc.DB.Table(g.TableName()).First(&g, "source_id = ?", req.GoodsID)
|
|
|
|
var cover goods2.GysGoodsMainPhotoTempModel
|
|
dbc.DB.Table(cover.TableName()).First(&cover, "is_master = 1 AND goods_id = ?", req.GoodsID)
|
|
|
|
var mainP []goods2.GysGoodsMainPhotoTempModel
|
|
dbc.DB.Model(&goods2.GysGoodsMainPhotoTempModel{}).Find(&mainP, "is_master = 0 AND goods_id = ?", req.GoodsID)
|
|
|
|
var detailP []goods2.GysGoodsDetailPhotoTempModel
|
|
dbc.DB.Model(&goods2.GysGoodsDetailPhotoTempModel{}).Find(&detailP, "type = 0 AND goods_id = ?", req.GoodsID)
|
|
|
|
var skuObj []goods2.GysGoodsSkuTempModel
|
|
dbc.DB.Model(&goods2.GysGoodsSkuTempModel{}).Find(&skuObj, "goods_id in (?)", req.GoodsID)
|
|
|
|
var video goods2.GysGoodsVideoTempModel
|
|
dbc.DB.Table(video.TableName()).First(&video, "goods_id = ?", req.GoodsID)
|
|
|
|
var ifg []strict.FileGroupTemp
|
|
dbc.DB.Table((&goods2.GysGoodsPhotoGroupTempModel{}).TableName()).Preload("File").
|
|
Find(&ifg, "goods_id = ? AND type = 1", req.GoodsID)
|
|
|
|
var ofg []strict.FileGroupTemp
|
|
dbc.DB.Model(&goods2.GysGoodsPhotoGroupTempModel{}).Preload("File").
|
|
Find(&ofg, "goods_id = ? AND type = 2", req.GoodsID)
|
|
|
|
var base strict.Base
|
|
base.GetBase(g.GysGoodsInfoModel)
|
|
|
|
result.GoodsID = g.SourceID
|
|
result.VendorName = base.VendorObj.EnterpriseName
|
|
result.GoodsSn = g.GoodsSn
|
|
result.First = base.First.Name
|
|
result.Second = base.Second.Name
|
|
result.BrandName = base.Brand.Name
|
|
result.Title = g.Title
|
|
result.SubTitle = g.ViceTitle
|
|
result.Material = g.Material
|
|
result.IsAbroad = g.IsAbroad
|
|
result.Storehouse = g.Storehouse
|
|
result.CountryName = base.CountryObj.Name
|
|
|
|
result.ReturnAddress = base.Address.Address
|
|
result.Cover = cover.Url
|
|
|
|
for _, v := range mainP {
|
|
result.MainPhotos = append(result.MainPhotos, v.Url)
|
|
}
|
|
|
|
for _, v := range detailP {
|
|
result.DetailPhotos = append(result.DetailPhotos, strict.FileDetail{
|
|
Name: v.Name,
|
|
Url: v.Url,
|
|
})
|
|
}
|
|
|
|
result.Video = video.Url
|
|
|
|
for _, v := range skuObj {
|
|
result.Sku = append(result.Sku, strict.Sku{
|
|
Name: v.Name,
|
|
PurchasePrice: v.PurchasePrice,
|
|
OriginalPrice: v.OriginalPrice,
|
|
DiscountPrice: v.DiscountPrice,
|
|
Inventory: v.Inventory,
|
|
Code: v.Code,
|
|
GoodsNum: v.GoodsNum,
|
|
PicUrl: v.PicUrl,
|
|
})
|
|
}
|
|
result.FreightName = base.FreightObj.GetFreightName()
|
|
fd := base.FreightObj.GetFreightDetail()
|
|
result.FreightDetail = &fd
|
|
|
|
for _, v := range ifg {
|
|
r := strict.FileGroup{
|
|
Title: v.Title,
|
|
ExpireTime: common.MyTime(v.ExpireTime.Time),
|
|
}
|
|
var fileR []strict.FileDetail
|
|
for _, k := range v.File {
|
|
fileR = append(fileR, strict.FileDetail{
|
|
Name: k.Name,
|
|
Url: k.Url,
|
|
})
|
|
}
|
|
r.File = fileR
|
|
result.InspectionReport = append(result.InspectionReport, r)
|
|
}
|
|
|
|
for _, v := range ofg {
|
|
r := strict.FileGroup{
|
|
Title: v.Title,
|
|
ExpireTime: common.MyTime(v.ExpireTime.Time),
|
|
}
|
|
var fileR []strict.FileDetail
|
|
for _, k := range v.File {
|
|
fileR = append(fileR, strict.FileDetail{
|
|
Name: k.Name,
|
|
Url: k.Url,
|
|
})
|
|
}
|
|
r.File = fileR
|
|
result.Other = append(result.Other, r)
|
|
}
|
|
return
|
|
}
|
|
|
|
type ArgsAdopt struct {
|
|
GoodsID uint `json:"goods_id" binding:"required"`
|
|
AuditType int `json:"audit_type" binding:"required"`
|
|
AdminID uint `json:"-"`
|
|
}
|
|
|
|
type ArgsReject struct {
|
|
ArgsAdopt
|
|
Content string `json:"content" binding:"required"`
|
|
}
|
|
|
|
func (o oldLogic) Reject(req *ArgsReject) error {
|
|
var g goods2.GysGoodsInfoTempModel
|
|
if err := dbc.DB.Table(g.TableName()).
|
|
First(&g, "source_id = ? AND audit_type = ?", req.GoodsID, req.AuditType).Error; err != nil {
|
|
return err
|
|
}
|
|
|
|
if g.AuditStatus != goods2.GysGoodsInfoAuditStatusPending {
|
|
return nil
|
|
}
|
|
|
|
if err := dbc.DB.Transaction(func(tx *gorm.DB) error {
|
|
g.AuditStatus = goods2.GysGoodsInfoAuditStatusFail
|
|
if err := tx.Save(&g).Error; err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := tx.Table(g.TableName()).Where("source_id = ?", req.GoodsID).
|
|
Update("publish_status", goods2.GysGoodsInfoPublishStatusFail).Error; err != nil {
|
|
return err
|
|
}
|
|
|
|
var auditLast goods2.GysGoodsAuditTempModel
|
|
if err := tx.Last(&auditLast, "audit_type = ? AND goods_id = ?", req.AuditType, req.GoodsID).Error; err != nil {
|
|
if err != gorm.ErrRecordNotFound {
|
|
return err
|
|
}
|
|
}
|
|
if auditLast.Id > 0 {
|
|
auditLast.IsLast = goods2.GysGoodsAuditIsLastFalse
|
|
if err := tx.Save(&auditLast).Error; err != nil {
|
|
return err
|
|
}
|
|
}
|
|
audit := goods2.GysGoodsAuditTempModel{
|
|
GysGoodsAuditModel: goods2.GysGoodsAuditModel{
|
|
GoodsId: req.GoodsID,
|
|
AuditType: req.AuditType,
|
|
AuditStatus: goods2.GysGoodsInfoAuditStatusFail,
|
|
IsLast: goods2.GysGoodsAuditIsLastTrue,
|
|
NoInfo: req.Content,
|
|
CreatedAt: formatime.NewSecondNow(),
|
|
AdminId: req.AdminID,
|
|
},
|
|
}
|
|
if err := tx.Create(&audit).Error; err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}); err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (o oldLogic) Adopt(args *ArgsAdopt) error {
|
|
var g goods2.GysGoodsInfoTempModel
|
|
if err := dbc.DB.Table(g.TableName()).
|
|
First(&g, "source_id = ? AND audit_type = ?", args.GoodsID, args.AuditType).Error; err != nil {
|
|
return err
|
|
}
|
|
|
|
if g.AuditStatus != goods2.GysGoodsInfoAuditStatusPending {
|
|
return nil
|
|
}
|
|
|
|
if err := dbc.DB.Transaction(func(tx *gorm.DB) error {
|
|
|
|
g.AuditStatus = goods2.GysGoodsInfoAuditStatusSuccess
|
|
g.AdminDate = formatime.NewSecondNow()
|
|
if err := tx.Save(&g).Error; err != nil {
|
|
return err
|
|
}
|
|
|
|
var temp []goods2.GysGoodsInfoTempModel
|
|
if err := tx.Set("gorm:query_option", "FOR UPDATE").
|
|
Find(&temp, "source_id = ?", args.GoodsID).Error; err != nil {
|
|
return err
|
|
}
|
|
flag := true
|
|
for _, v := range temp {
|
|
if v.AuditStatus != goods2.GysGoodsInfoAuditStatusSuccess {
|
|
flag = false
|
|
}
|
|
}
|
|
var s goods2.GysGoodsInfoModel
|
|
if err := tx.Table(s.TableName()).First(&s, "id = ?", args.GoodsID).Error; err != nil {
|
|
return err
|
|
}
|
|
|
|
if flag && s.PublishStatus == goods2.GysGoodsInfoPublishStatusModify {
|
|
// 商品主体回写
|
|
for _, v := range temp {
|
|
v.PublishStatus = goods2.GysGoodsInfoPublishStatusSuccess
|
|
if err := tx.Save(&v).Error; err != nil {
|
|
return err
|
|
}
|
|
}
|
|
g.AuditType = goods2.GysGoodsInfoAuditTypeOperation
|
|
g.PublishStatus = goods2.GysGoodsInfoPublishStatusSuccess
|
|
g.Id = g.SourceID
|
|
if err := tx.Table(g.GysGoodsInfoModel.TableName()).
|
|
Save(&(g.GysGoodsInfoModel)).Error; err != nil {
|
|
return err
|
|
}
|
|
|
|
data := goods3.RecookGoodsInfoModel{
|
|
GoodsName: g.Title,
|
|
Description: g.ViceTitle,
|
|
FreightID: g.Freight,
|
|
IsImport: g.IsAbroad,
|
|
Storehouse: g.Storehouse,
|
|
Country: g.Country,
|
|
ReturnAddressID: g.ReturnAddressID,
|
|
}
|
|
if err := tx.Table(data.TableName()).
|
|
Select("goods_name, description, freight_id, is_import, storehouse, country, return_address_id").
|
|
Where("id = ?", g.MainGoodsId).Updates(&data).Error; err != nil {
|
|
return err
|
|
}
|
|
|
|
// sku回写
|
|
var skus []goods2.GysGoodsSkuTempModel
|
|
if err := tx.Table((&goods2.GysGoodsSkuTempModel{}).TableName()).
|
|
Find(&skus, "goods_id = ?", args.GoodsID).Error; err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := tx.Delete(&goods2.GysGoodsAttributeModel{}, "goods_id = ?", args.GoodsID).Error; err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := tx.Delete(&goods3.RecookGoodsAttributeModel{}, "goods_id = ?", g.MainGoodsId).Error; err != nil {
|
|
return err
|
|
}
|
|
for _, sku := range skus {
|
|
attr := goods2.GysGoodsAttributeModel{
|
|
GoodsId: data.Id,
|
|
Name: "规格",
|
|
Value: sku.Name,
|
|
}
|
|
if err := tx.Create(&attr).Error; err != nil {
|
|
return err
|
|
}
|
|
sku.CombineId = strconv.Itoa(int(attr.Id))
|
|
if err := tx.Save(&(sku.GysGoodsSkuModel)).Error; err != nil {
|
|
return err
|
|
}
|
|
|
|
rAttr := goods3.RecookGoodsAttributeModel{
|
|
GoodsId: g.MainGoodsId,
|
|
Name: "规格",
|
|
Value: sku.Name,
|
|
}
|
|
if err := tx.Create(&rAttr).Error; err != nil {
|
|
return err
|
|
}
|
|
|
|
//rate := sku.CommissionRate.Truncate(2)
|
|
//commission := rate.Mul(sku.DiscountPrice).Truncate(2)
|
|
recookSku := goods3.RecookGoodsSkuModel{
|
|
Name: sku.Name,
|
|
CombineId: strconv.Itoa(int(rAttr.Id)),
|
|
PicURL: sku.PicUrl,
|
|
//PurchasePrice: sku.PurchasePrice,
|
|
//OriginalPrice: sku.DiscountPrice.Add(sku.Coupon),
|
|
//DiscountPrice: sku.RealDiscountPrice,
|
|
//CommissionRate: rate,
|
|
//Commission: commission,
|
|
//ControlPrice: sku.OriginalPrice,
|
|
//Inventory: sku.Inventory,
|
|
//Coupon: sku.Coupon,
|
|
GoodsNum: sku.GoodsNum,
|
|
//TMallPrice: sku.TMallPrice,
|
|
//TMallUrl: sku.TMallUrl,
|
|
//JdPrice: sku.JdPrice,
|
|
//JdUrl: sku.JdUrl,
|
|
}
|
|
if err := tx.Table(recookSku.TableName()).
|
|
Where("gys_sku_id = ?", sku.Id).Updates(&recookSku).Error; err != nil {
|
|
return err
|
|
}
|
|
}
|
|
// 主图回写
|
|
var mainP []goods2.GysGoodsMainPhotoTempModel
|
|
if err := tx.Table((&goods2.GysGoodsMainPhotoTempModel{}).TableName()).
|
|
Find(&mainP, "goods_id = ?", args.GoodsID).Error; err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := tx.Table((&goods3.RecookGoodsMainPhotoModel{}).TableName()).
|
|
Delete(&goods3.RecookGoodsMainPhotoModel{}, "goods_id = ?", g.MainGoodsId).Error; err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := tx.Table((&goods2.GysGoodsMainPhotoModel{}).TableName()).
|
|
Delete(&goods2.GysGoodsMainPhotoModel{}, "goods_id = ?", args.GoodsID).Error; err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, v := range mainP {
|
|
if err := tx.Create(&goods2.GysGoodsMainPhotoModel{
|
|
GoodsId: args.GoodsID,
|
|
Url: v.Url,
|
|
Name: v.Name,
|
|
IsMaster: v.IsMaster,
|
|
OrderNo: v.OrderNo,
|
|
Width: v.Width,
|
|
Height: v.Height,
|
|
}).Error; err != nil {
|
|
return err
|
|
}
|
|
if err := tx.Create(&goods3.RecookGoodsMainPhotoModel{
|
|
GoodsId: g.MainGoodsId,
|
|
Url: v.Url,
|
|
Name: v.Name,
|
|
IsMaster: v.IsMaster,
|
|
OrderNo: v.OrderNo,
|
|
Width: v.Width,
|
|
Height: v.Height,
|
|
}).Error; err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
// 详细图回写
|
|
var detailP []goods2.GysGoodsDetailPhotoTempModel
|
|
if err := tx.Table((&goods2.GysGoodsDetailPhotoTempModel{}).TableName()).
|
|
Find(&detailP, "goods_id = ? AND type = ?", args.GoodsID, goods2.GysGoodsDetailPhotoTypeDetail).
|
|
Error; err != nil && err != gorm.ErrRecordNotFound {
|
|
return err
|
|
}
|
|
|
|
if err := tx.Table((&goods3.RecookGoodsDetailPhotoModel{}).TableName()).
|
|
Delete(&goods3.RecookGoodsDetailPhotoModel{}, "goods_id = ?", g.MainGoodsId).
|
|
Error; err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := tx.Table((&goods2.GysGoodsDetailPhotoModel{}).TableName()).
|
|
Delete(&goods2.GysGoodsDetailPhotoModel{}, "goods_id = ?", args.GoodsID).
|
|
Error; err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, v := range detailP {
|
|
if err := tx.Create(&goods2.GysGoodsDetailPhotoModel{
|
|
GoodsId: args.GoodsID,
|
|
Url: v.Url,
|
|
Name: v.Name,
|
|
OrderNo: v.OrderNo,
|
|
Width: v.Width,
|
|
Height: v.Height,
|
|
Type: 0,
|
|
}).Error; err != nil {
|
|
return err
|
|
}
|
|
if err := tx.Create(&goods3.RecookGoodsDetailPhotoModel{
|
|
GoodsID: g.MainGoodsId,
|
|
Url: v.Url,
|
|
Name: v.Name,
|
|
OrderNo: v.OrderNo,
|
|
Width: v.Width,
|
|
Height: v.Height,
|
|
}).Error; err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
type Report struct {
|
|
goods2.GysGoodsPhotoGroupTempModel
|
|
File []goods2.GysGoodsDetailPhotoTempModel `gorm:"foreignKey:group_id"`
|
|
}
|
|
|
|
var r []Report
|
|
if err := tx.Table((&goods2.GysGoodsPhotoGroupTempModel{}).TableName()).Preload("File").
|
|
Find(&r, "goods_id = ? AND type != ?", args.GoodsID, goods2.GysGoodsDetailPhotoTypeDetail).
|
|
Error; err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := tx.Table((&goods2.GysGoodsPhotoGroupModel{}).TableName()).
|
|
Delete(&goods2.GysGoodsPhotoGroupModel{}, "goods_id = ?", args.GoodsID).Error; err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, v := range r {
|
|
group := goods2.GysGoodsPhotoGroupModel{
|
|
GoodsId: args.GoodsID,
|
|
Type: v.Type,
|
|
ExpireTime: v.ExpireTime,
|
|
Title: v.Title,
|
|
}
|
|
if err := tx.Create(&group).Error; err != nil {
|
|
return err
|
|
}
|
|
for _, file := range v.File {
|
|
if err := tx.Create(&goods2.GysGoodsDetailPhotoModel{
|
|
GoodsId: args.GoodsID,
|
|
Url: file.Url,
|
|
Name: file.Name,
|
|
OrderNo: file.OrderNo,
|
|
Width: file.Width,
|
|
Height: file.Height,
|
|
Type: file.Type,
|
|
ExpireTime: file.ExpireTime,
|
|
GroupID: group.ID,
|
|
}).Error; err != nil {
|
|
return err
|
|
}
|
|
}
|
|
}
|
|
|
|
// 视频回写
|
|
var video goods2.GysGoodsVideoTempModel
|
|
tx.Table(video.TableName()).First(&video, "goods_id = ?", args.GoodsID)
|
|
if err := tx.Table((&goods2.GysGoodsVideoModel{}).TableName()).
|
|
Delete(&goods2.GysGoodsVideoModel{}, "goods_id = ?", args.GoodsID).Error; err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := tx.Table((&goods3.RecookGoodsVideoModel{}).TableName()).
|
|
Delete(&goods3.RecookGoodsVideoModel{}, "goods_id = ?", g.MainGoodsId).Error; err != nil {
|
|
return err
|
|
}
|
|
if video.Id > 0 {
|
|
if err := tx.Create(&goods2.GysGoodsVideoModel{
|
|
GoodsId: args.GoodsID,
|
|
Url: video.Url,
|
|
}).Error; err != nil {
|
|
return err
|
|
}
|
|
videoPath := filepath.Join(static_path.Dir.Root, video.Url)
|
|
fileInfo, err := os.Stat(videoPath)
|
|
if err != nil && os.IsNotExist(err) {
|
|
return err
|
|
}
|
|
|
|
fileSize := fileInfo.Size()
|
|
|
|
duration, err := tools.ParseVideoDuration(videoPath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if err = tx.Create(&goods3.RecookGoodsVideoModel{
|
|
GoodsId: g.MainGoodsId,
|
|
Thumbnail: tools.GenerateVideoThumbnail(video.Url),
|
|
URL: video.Url,
|
|
Duration: uint(duration),
|
|
Size: float64(fileSize)/(1<<20) + 0.005,
|
|
}).Error; err != nil {
|
|
return err
|
|
}
|
|
}
|
|
}
|
|
|
|
var auditLast goods2.GysGoodsAuditTempModel
|
|
if err := tx.Last(&auditLast, "audit_type = ? AND goods_id = ?", args.AuditType, args.GoodsID).Error; err != nil {
|
|
if err != gorm.ErrRecordNotFound {
|
|
return err
|
|
}
|
|
}
|
|
if auditLast.Id > 0 {
|
|
auditLast.IsLast = goods2.GysGoodsAuditIsLastFalse
|
|
if err := tx.Save(&auditLast).Error; err != nil {
|
|
return err
|
|
}
|
|
}
|
|
audit := goods2.GysGoodsAuditTempModel{
|
|
GysGoodsAuditModel: goods2.GysGoodsAuditModel{
|
|
GoodsId: args.GoodsID,
|
|
AuditType: args.AuditType,
|
|
AuditStatus: goods2.GysGoodsInfoAuditStatusSuccess,
|
|
IsLast: goods2.GysGoodsAuditIsLastTrue,
|
|
CreatedAt: formatime.NewSecondNow(),
|
|
AdminId: args.AdminID,
|
|
},
|
|
}
|
|
if err := tx.Create(&audit).Error; err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}); err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (o oldLogic) AuditDesignModify(args *strict.Goods) error {
|
|
return dbc.DB.Transaction(func(tx *gorm.DB) error {
|
|
var gs goods2.GysGoodsInfoTempModel
|
|
if err := tx.First(&gs, "source_id = ?", args.GoodsID).Error; err != nil {
|
|
return err
|
|
}
|
|
if args.Cover != "" {
|
|
if err := tx.Model(&goods2.GysGoodsMainPhotoTempModel{}).
|
|
Where("goods_id = ? AND is_master = 1", args.GoodsID).
|
|
Update("url", args.Cover).Error; err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
if len(args.MainPhotos) > 0 {
|
|
if err := tx.
|
|
Delete(&goods2.GysGoodsMainPhotoTempModel{}, "goods_id = ? AND is_master <> 1", args.GoodsID).
|
|
Error; err != nil {
|
|
return err
|
|
}
|
|
for index, v := range args.MainPhotos {
|
|
size, err := common.ImageSize(filepath.Join(static_path.Dir.Root, v))
|
|
if err != nil {
|
|
return errors.New("商品图片错误")
|
|
}
|
|
if err = tx.Create(&goods2.GysGoodsMainPhotoTempModel{
|
|
GysGoodsMainPhotoModel: goods2.GysGoodsMainPhotoModel{
|
|
GoodsId: args.GoodsID,
|
|
Url: v,
|
|
Name: filepath.Base(v),
|
|
IsMaster: 0,
|
|
OrderNo: index + 1,
|
|
Width: size.X,
|
|
Height: size.Y,
|
|
},
|
|
}).Error; err != nil {
|
|
return err
|
|
}
|
|
}
|
|
}
|
|
|
|
if len(args.DetailPhotos) > 0 {
|
|
if err := tx.Delete(&goods2.GysGoodsDetailPhotoTempModel{}, "goods_id = ? AND type=0", args.GoodsID).Error; err != nil {
|
|
return err
|
|
}
|
|
for index, v := range args.DetailPhotos {
|
|
size, err := common.ImageSize(filepath.Join(static_path.Dir.Root, v.Url))
|
|
if err != nil {
|
|
return errors.New("商品图片错误")
|
|
}
|
|
if err = tx.Create(&goods2.GysGoodsDetailPhotoTempModel{
|
|
GysGoodsDetailPhotoModel: goods2.GysGoodsDetailPhotoModel{
|
|
GoodsId: args.GoodsID,
|
|
Url: v.Url,
|
|
Name: v.Name,
|
|
OrderNo: index + 1,
|
|
Width: size.X,
|
|
Height: size.Y,
|
|
Type: 0,
|
|
},
|
|
}).Error; err != nil {
|
|
return err
|
|
}
|
|
}
|
|
}
|
|
|
|
return nil
|
|
})
|
|
}
|