$goods) { if (empty($form['sku'][$goods['goods_id']]['goods']['extra']['score_give_setting'])) continue; $give_setting = $form['sku'][$goods['goods_id']]['goods']['extra']['score_give_setting']; $settingArr = Json::decode($give_setting, true); if (!is_array($settingArr)) { continue; // 确保 $settingArr 是数组 } if (isset($settingArr['enable_give_score']) && empty($settingArr['enable_give_score'])) continue; if (empty($settingArr['code']) || $settingArr['code'] != 'score') continue; foreach ($goods['goods_details'] as $k => $goods_detail) { if (isset($item['goods'][$goods_id]['goods_details'][$k]['marketing']['give_' . $settingArr['code']])) { $give_marketing = $item['goods'][$goods_id]['goods_details'][$k]['marketing']['give_' . $settingArr['code']]; if (!empty($give_marketing)) { // 当前订单存在积分赠送信息 // 计算积分赠送数目 $give_num = self::calculateGiveNum($goods_detail, $total_price, $settingArr, $form); if ($give_num >= 0 && $give_num != false) { $item['goods'][$goods_id]['goods_details'][$k]['marketing']['give_' . $settingArr['code']] = $give_num; } } } } } } unset($item); return $form; } /** * 获取商品总金额 * @param $goods * @return float|int */ private static function getTotalPrice($goods) { $total_price = 0; foreach ($goods as $item) { $total_price += array_sum( array_column($item['goods'], 'goods_price') ); } return $total_price; } /** * 积分计算数目 * @param $goods_detail * @param $total_price * @param $settingArr * @param $form * @return int|mixed */ private static function calculateGiveNum($goods_detail, $total_price, $settingArr, $form) { // 判断积分赠送是否是百分比-并且赠送计算方式为订单支付 if ($settingArr['give_type'] == 2 && !empty($settingArr['calculation_value'])) { $give_rate = $settingArr['give_num'] / 100; // 获取百分比 $give_num = bcmul($give_rate, $goods_detail['goods_price'], 2); // 使用 bcmath 进行高精度计算 return max($give_num, 0); } return false; } }