diff --git a/business/jxstore/cms/store_sku.go b/business/jxstore/cms/store_sku.go index f9d837d4d..04e3a82d9 100644 --- a/business/jxstore/cms/store_sku.go +++ b/business/jxstore/cms/store_sku.go @@ -707,27 +707,45 @@ func updateStoresSkusWithoutSync(ctx *jxcontext.Context, db *dao.DaoDB, storeIDs }() for _, storeID := range storeIDs { for _, skuBindInfo := range skuBindInfos { + // 关注且没有给价时,需要尝试从store_sku_bind中得到已有的单价 + needGetExistingUnitPrice := skuBindInfo.UnitPrice == 0 && skuBindInfo.IsFocus == 1 inSkuBinds := skuBindInfo.Skus var allBinds []*tStoreSkuBindAndSpec sql := ` SELECT t2.*, - t1.id real_sku_id, t1.spec_quality, t1.spec_unit, - t3.price sku_name_price, t3.unit sku_name_unit, t3.name + t1.id real_sku_id, t1.spec_quality, t1.spec_unit,` + if needGetExistingUnitPrice { + sql += " IF(t5.unit_price > 0, t5.unit_price, t3.price) sku_name_price," + } + sql += ` + t3.unit sku_name_unit, t3.name FROM sku t1 JOIN store ts ON ts.id = ? AND ts.deleted_at = ? LEFT JOIN store_sku_bind t2 ON t2.sku_id = t1.id AND t2.store_id = ts.id AND t2.deleted_at = ? - JOIN sku_name t3 ON t1.name_id = t3.id AND t3.deleted_at = ? - WHERE t1.name_id = ? AND t1.deleted_at = ? - FOR UPDATE` + JOIN sku_name t3 ON t1.name_id = t3.id AND t3.deleted_at = ?` sqlParams := []interface{}{ storeID, utils.DefaultTimeValue, utils.DefaultTimeValue, utils.DefaultTimeValue, - skuBindInfo.NameID, - utils.DefaultTimeValue, } + if needGetExistingUnitPrice { + sql += ` + LEFT JOIN ( + SELECT t7.store_id, t8.name_id, CAST(AVG(t7.unit_price) AS SIGNED) unit_price + FROM store_sku_bind t7 + JOIN sku t8 ON t8.id = t7.sku_id AND t8.name_id = ? + WHERE t7.deleted_at = ? AND t7.store_id = ? + GROUP BY 1,2 + ) t5 ON t5.store_id = ts.id AND t5.name_id = t1.name_id` + sqlParams = append(sqlParams, skuBindInfo.NameID, utils.DefaultTimeValue, storeID) + } + sql += ` + WHERE t1.name_id = ? AND t1.deleted_at = ? + FOR UPDATE` + sqlParams = append(sqlParams, skuBindInfo.NameID, utils.DefaultTimeValue) + // globals.SugarLogger.Debug(sql) if err = dao.GetRows(db, &allBinds, sql, sqlParams...); err == nil { if len(allBinds) > 0 { // globals.SugarLogger.Debug(utils.Format4Output(allBinds, false))