diff --git a/app/admin/models/commodity.go b/app/admin/models/commodity.go index 3d8e3a7..f1a848b 100644 --- a/app/admin/models/commodity.go +++ b/app/admin/models/commodity.go @@ -1229,13 +1229,13 @@ func (m *StockImporter) processErpStocks(erpStocks []ErpStockCommodity) error { }) } - err := m.ErpStockCountUpdate(begin) //更新or插入库存表 + err := errGroup.Wait() if err != nil { begin.Rollback() return err } - err = errGroup.Wait() + err = m.ErpStockCountUpdate(begin) //更新or插入库存表 if err != nil { begin.Rollback() return err @@ -1259,8 +1259,26 @@ func createStockList(begin *gorm.DB, stockList []ErpStockCommodity) error { return nil } +// 合并导入数据的辅助函数 +func mergeCensusMap(censusMap map[uint32]map[uint32]uint32) map[uint32]map[uint32]uint32 { + mergedMap := make(map[uint32]map[uint32]uint32) + for storeId, commodities := range censusMap { + if mergedMap[storeId] == nil { + mergedMap[storeId] = make(map[uint32]uint32) + } + for commodityId, count := range commodities { + mergedMap[storeId][commodityId] += count + } + } + return mergedMap +} + func (m *StockImporter) ErpStockCountUpdate(gdb *gorm.DB) error { - for k1, v1 := range m.CensusMap { + // 合并导入数据,避免同一商品多次重复处理 + mergedCensusMap := mergeCensusMap(m.CensusMap) + + //for k1, v1 := range m.CensusMap { + for k1, v1 := range mergedCensusMap { for k2, v2 := range v1 { exist, err := QueryRecordExist(fmt.Sprintf("SELECT * FROM erp_stock WHERE store_id=%d AND erp_commodity_id=%d", k1, k2)) if err != nil { diff --git a/app/admin/models/erp_order.go b/app/admin/models/erp_order.go index 8fabd28..b2a2d3a 100644 --- a/app/admin/models/erp_order.go +++ b/app/admin/models/erp_order.go @@ -5382,8 +5382,8 @@ func checkOrderData(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) { req.ErpOrderCommodities[i].MemberDiscount = req.ErpOrderCommodities[i].MemberDiscount / float64(req.ErpOrderCommodities[i].Count) // 单个商品实收金额 req.ErpOrderCommodities[i].ReceivedAmount = req.ErpOrderCommodities[i].ReceivedAmount / float64(req.ErpOrderCommodities[i].Count) - // 单个商品退货金额 - req.ErpOrderCommodities[i].RejectedAmount = req.ErpOrderCommodities[i].RejectedAmount / float64(req.ErpOrderCommodities[i].Count) + //// 单个商品退货金额 + //req.ErpOrderCommodities[i].RejectedAmount = req.ErpOrderCommodities[i].RejectedAmount / float64(req.ErpOrderCommodities[i].RejectedCount) for j := 0; j < int(req.ErpOrderCommodities[i].Count); j++ { stockIdList, _ := stringToIntArray(req.ErpOrderCommodities[i].ErpStockCommodityID)