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

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
})
}