1、修改库存调拨收货时,库存列表数据重复或者加锁的问题;
This commit is contained in:
parent
d95814ad95
commit
2a4f28f9a8
|
@ -786,6 +786,33 @@ func MergeCommodities(commodities []ErpInventoryAllotCommodity) []ErpInventoryAl
|
||||||
return mergedCommodities
|
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相同的非串码商品进行合并,数量累加即可
|
// MergeChangeCommodities 遍历库存变动商品信息,将商品id相同的非串码商品进行合并,数量累加即可
|
||||||
func MergeChangeCommodities(commodities []ErpInventoryChangeCommodity) []ErpInventoryChangeCommodity {
|
func MergeChangeCommodities(commodities []ErpInventoryChangeCommodity) []ErpInventoryChangeCommodity {
|
||||||
// 用于存储合并后的商品信息
|
// 用于存储合并后的商品信息
|
||||||
|
@ -1043,13 +1070,15 @@ func ReceiveAllotInventory(req *InventoryAllotReceiveReq, c *gin.Context) error
|
||||||
// 遍历库存调拨商品信息
|
// 遍历库存调拨商品信息
|
||||||
for _, v := range trimCommodities {
|
for _, v := range trimCommodities {
|
||||||
var stockCommodity []ErpStockCommodity
|
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).
|
"AND state = ? AND imei = ?", v.CommodityId, inventoryAllotOrder.DeliverStoreId, InAllot, v.IMEI).
|
||||||
Find(&stockCommodity).Error
|
Find(&stockCommodity).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
begin.Rollback()
|
||||||
return fmt.Errorf("查询商品库存失败:[%s]", err.Error())
|
return fmt.Errorf("查询商品库存失败:[%s]", err.Error())
|
||||||
}
|
}
|
||||||
if len(stockCommodity) == 0 {
|
if len(stockCommodity) == 0 {
|
||||||
|
begin.Rollback()
|
||||||
return fmt.Errorf("未找到商品库存信息")
|
return fmt.Errorf("未找到商品库存信息")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1059,18 +1088,37 @@ func ReceiveAllotInventory(req *InventoryAllotReceiveReq, c *gin.Context) error
|
||||||
stockCommodity[i].StoreName = inventoryAllotOrder.ReceiveStoreName
|
stockCommodity[i].StoreName = inventoryAllotOrder.ReceiveStoreName
|
||||||
stockCommodity[i].State = InStock
|
stockCommodity[i].State = InStock
|
||||||
stockCommodity[i].StockTime = time.Now()
|
stockCommodity[i].StockTime = time.Now()
|
||||||
err = begin.Model(&ErpStockCommodity{}).Where("id = ?", stockCommodity[i].ID).
|
err = begin.Where("id", stockCommodity[i].ID).Omit("created_at").Save(&stockCommodity[i]).Error
|
||||||
Updates(stockCommodity[i]).Error
|
//err = begin.Model(&ErpStockCommodity{}).Where("id = ?", stockCommodity[i].ID).
|
||||||
|
// Updates(stockCommodity[i]).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
begin.Rollback()
|
begin.Rollback()
|
||||||
return fmt.Errorf("更新商品库存失败:%s", err.Error())
|
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",
|
exist, err := QueryRecordExist(fmt.Sprintf("SELECT * FROM erp_stock WHERE store_id=%d AND erp_commodity_id=%d",
|
||||||
inventoryAllotOrder.ReceiveStoreId, v.CommodityId))
|
inventoryAllotOrder.ReceiveStoreId, v.CommodityId))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
begin.Rollback()
|
||||||
logger.Errorf("exist err:", err)
|
logger.Errorf("exist err:", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -1101,6 +1149,7 @@ func ReceiveAllotInventory(req *InventoryAllotReceiveReq, c *gin.Context) error
|
||||||
}
|
}
|
||||||
err = begin.Create(stock).Error
|
err = begin.Create(stock).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
begin.Rollback()
|
||||||
logger.Errorf("create stock err:", err)
|
logger.Errorf("create stock err:", err)
|
||||||
return 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",
|
"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
|
v.Count, inventoryAllotOrder.DeliverStoreId, v.CommodityId)).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
begin.Rollback()
|
||||||
logger.Errorf("update stock err:", err)
|
logger.Errorf("update stock err:", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user