1、修改库存调拨收货时,库存列表数据重复或者加锁的问题;
This commit is contained in:
parent
d95814ad95
commit
2a4f28f9a8
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user