From aae1718e7cff68e5c6bcf90677f40dadb7fca075 Mon Sep 17 00:00:00 2001 From: chenlin Date: Mon, 4 Nov 2024 15:51:05 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E4=BF=AE=E5=A4=8D=E5=BA=93=E5=AD=98?= =?UTF-8?q?=E5=8F=98=E5=8A=A8-=E5=A2=9E=E5=8A=A0=E5=BA=93=E5=AD=98?= =?UTF-8?q?=E5=92=8C=E4=BA=A7=E5=93=81=E5=85=A5=E5=BA=93=E6=97=B6=EF=BC=8C?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=A4=9A=E4=B8=AA=E7=9B=B8=E5=90=8C=E4=B8=94?= =?UTF-8?q?=E4=B9=8B=E5=89=8D=E6=B2=A1=E6=9C=89=E7=9A=84=E5=95=86=E5=93=81?= =?UTF-8?q?=E6=97=B6=E9=87=8D=E5=A4=8D=E6=8F=92=E5=85=A5erp=5Fstock?= =?UTF-8?q?=E8=A1=A8=E6=8A=A5=E9=94=99=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/models/inventory_change.go | 10 ++++++++-- app/admin/models/inventory_product.go | 10 ++++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/app/admin/models/inventory_change.go b/app/admin/models/inventory_change.go index 8383e9e..f466eaa 100644 --- a/app/admin/models/inventory_change.go +++ b/app/admin/models/inventory_change.go @@ -8,6 +8,7 @@ import ( "go-admin/logger" "go-admin/tools" "gorm.io/gorm" + "gorm.io/gorm/clause" "math/rand" "time" ) @@ -690,9 +691,14 @@ func handleInventoryAdd(gdb *gorm.DB, changeOrder ErpInventoryChangeOrder) error Count: v.Count, DispatchCount: 0, } - err = gdb.Create(stock).Error + // 使用带冲突处理的插入操作 + err = gdb.Clauses(clause.OnConflict{ + Columns: []clause.Column{{Name: "store_id"}, {Name: "erp_commodity_id"}}, // 唯一约束字段 + DoUpdates: clause.Assignments(map[string]interface{}{"count": gorm.Expr("count + ?", v.Count)}), // 冲突时累加 count + }).Create(stock).Error + if err != nil { - logger.Errorf("create stock err:", err) + logger.Errorf("create or update stock err:", err) return err } } diff --git a/app/admin/models/inventory_product.go b/app/admin/models/inventory_product.go index a802649..add47bc 100644 --- a/app/admin/models/inventory_product.go +++ b/app/admin/models/inventory_product.go @@ -8,6 +8,7 @@ import ( "go-admin/logger" "go-admin/tools" "gorm.io/gorm" + "gorm.io/gorm/clause" "math/rand" "time" ) @@ -648,9 +649,14 @@ func productAuditAndUpdateStock(gdb *gorm.DB, productOrder ErpInventoryProductOr Count: v.Count, DispatchCount: 0, } - err = gdb.Create(stock).Error + // 使用带冲突处理的插入操作 + err = gdb.Clauses(clause.OnConflict{ + Columns: []clause.Column{{Name: "store_id"}, {Name: "erp_commodity_id"}}, // 唯一约束字段 + DoUpdates: clause.Assignments(map[string]interface{}{"count": gorm.Expr("count + ?", v.Count)}), // 冲突时累加 count + }).Create(stock).Error + if err != nil { - logger.Errorf("create stock err:", err) + logger.Errorf("create or update stock err:", err) return err } }