From 2a4f28f9a895fc7ad5b9a46e9e84eb85854b6509 Mon Sep 17 00:00:00 2001 From: chenlin Date: Wed, 11 Sep 2024 17:32:56 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E4=BF=AE=E6=94=B9=E5=BA=93=E5=AD=98?= =?UTF-8?q?=E8=B0=83=E6=8B=A8=E6=94=B6=E8=B4=A7=E6=97=B6=EF=BC=8C=E5=BA=93?= =?UTF-8?q?=E5=AD=98=E5=88=97=E8=A1=A8=E6=95=B0=E6=8D=AE=E9=87=8D=E5=A4=8D?= =?UTF-8?q?=E6=88=96=E8=80=85=E5=8A=A0=E9=94=81=E7=9A=84=E9=97=AE=E9=A2=98?= =?UTF-8?q?=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/models/inventory_allot.go | 56 +++++++++++++++++++++++++++-- 1 file changed, 53 insertions(+), 3 deletions(-) diff --git a/app/admin/models/inventory_allot.go b/app/admin/models/inventory_allot.go index 7c7641d..b343f36 100644 --- a/app/admin/models/inventory_allot.go +++ b/app/admin/models/inventory_allot.go @@ -786,6 +786,33 @@ func MergeCommodities(commodities []ErpInventoryAllotCommodity) []ErpInventoryAl return mergedCommodities } +// MergeAllCommodities 遍历库存调拨商品信息,将商品id相同的所有商品进行合并,数量累加即可 +func MergeAllCommodities(commodities []ErpInventoryAllotCommodity) []ErpInventoryAllotCommodity { + // 用于存储合并后的商品信息 + mergedCommodities := make([]ErpInventoryAllotCommodity, 0) + // 用于记录无串码商品的合并信息 + commodityMap := make(map[uint32]*ErpInventoryAllotCommodity) + + for _, commodity := range commodities { + if existing, found := commodityMap[commodity.CommodityId]; found { + // 如果相同商品 ID 的无串码商品已存在,则数量累加 + existing.Count += commodity.Count + commodityMap[commodity.CommodityId] = existing + } else { + // 否则,加入到 commodityMap 中 + newCommodity := commodity + commodityMap[commodity.CommodityId] = &newCommodity + } + } + + // 将合并后的无串码商品加入到合并后的列表中 + for _, commodity := range commodityMap { + mergedCommodities = append(mergedCommodities, *commodity) + } + + return mergedCommodities +} + // MergeChangeCommodities 遍历库存变动商品信息,将商品id相同的非串码商品进行合并,数量累加即可 func MergeChangeCommodities(commodities []ErpInventoryChangeCommodity) []ErpInventoryChangeCommodity { // 用于存储合并后的商品信息 @@ -1043,13 +1070,15 @@ func ReceiveAllotInventory(req *InventoryAllotReceiveReq, c *gin.Context) error // 遍历库存调拨商品信息 for _, v := range trimCommodities { var stockCommodity []ErpStockCommodity - err := orm.Eloquent.Table("erp_stock_commodity").Where("erp_commodity_id = ? AND store_id = ? "+ + err = orm.Eloquent.Table("erp_stock_commodity").Where("erp_commodity_id = ? AND store_id = ? "+ "AND state = ? AND imei = ?", v.CommodityId, inventoryAllotOrder.DeliverStoreId, InAllot, v.IMEI). Find(&stockCommodity).Error if err != nil { + begin.Rollback() return fmt.Errorf("查询商品库存失败:[%s]", err.Error()) } if len(stockCommodity) == 0 { + begin.Rollback() return fmt.Errorf("未找到商品库存信息") } @@ -1059,18 +1088,37 @@ func ReceiveAllotInventory(req *InventoryAllotReceiveReq, c *gin.Context) error stockCommodity[i].StoreName = inventoryAllotOrder.ReceiveStoreName stockCommodity[i].State = InStock stockCommodity[i].StockTime = time.Now() - err = begin.Model(&ErpStockCommodity{}).Where("id = ?", stockCommodity[i].ID). - Updates(stockCommodity[i]).Error + err = begin.Where("id", stockCommodity[i].ID).Omit("created_at").Save(&stockCommodity[i]).Error + //err = begin.Model(&ErpStockCommodity{}).Where("id = ?", stockCommodity[i].ID). + // Updates(stockCommodity[i]).Error if err != nil { begin.Rollback() return fmt.Errorf("更新商品库存失败:%s", err.Error()) } } + } + + // 遍历库存调拨商品信息,将商品id相同的非串码商品进行合并,数量累加即可 + trimAllCommodities := MergeAllCommodities(trimCommodities) + for _, v := range trimAllCommodities { + var stockCommodity []ErpStockCommodity + err = orm.Eloquent.Table("erp_stock_commodity").Where("erp_commodity_id = ? AND store_id = ? "+ + "AND state = ? AND imei = ?", v.CommodityId, inventoryAllotOrder.DeliverStoreId, InAllot, v.IMEI). + Find(&stockCommodity).Error + if err != nil { + begin.Rollback() + return fmt.Errorf("查询商品库存失败:[%s]", err.Error()) + } + if len(stockCommodity) == 0 { + begin.Rollback() + return fmt.Errorf("未找到商品库存信息") + } // 更新调入门店的库存数量 exist, err := QueryRecordExist(fmt.Sprintf("SELECT * FROM erp_stock WHERE store_id=%d AND erp_commodity_id=%d", inventoryAllotOrder.ReceiveStoreId, v.CommodityId)) if err != nil { + begin.Rollback() logger.Errorf("exist err:", err) return err } @@ -1101,6 +1149,7 @@ func ReceiveAllotInventory(req *InventoryAllotReceiveReq, c *gin.Context) error } err = begin.Create(stock).Error if err != nil { + begin.Rollback() logger.Errorf("create stock err:", err) return err } @@ -1121,6 +1170,7 @@ func ReceiveAllotInventory(req *InventoryAllotReceiveReq, c *gin.Context) error "UPDATE erp_stock SET dispatch_count = dispatch_count-%d WHERE store_id=%d AND erp_commodity_id=%d", v.Count, inventoryAllotOrder.DeliverStoreId, v.CommodityId)).Error if err != nil { + begin.Rollback() logger.Errorf("update stock err:", err) return err }