| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- <?php
- namespace backend\modules\mall\services;
- use yii\helpers\Json;
- /**
- * 积分赠送服务
- */
- class GiveScoreService
- {
- /**
- * 设置商品积分营销信息
- * @param $form
- * @return mixed
- */
- public static function setGoodsMarketing($form)
- {
- $group_goods = $form['group_order_goods'];
- if (empty($group_goods)) return $form;
- if (!isset($form['sku']) || !isset($form['total_pay_money'])) {
- return $form;
- }
- $total_price = self::getTotalPrice($group_goods); // 总金额
- foreach ($group_goods as &$item) { // 循环商品组
- foreach ($item['goods'] as $goods_id => $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;
- }
- }
|