| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- <?php
- namespace common\logic\order\marketing;
- use common\models\goods\GoodsExtra;
- use common\models\user\User;
- use yii\helpers\Json;
- /**
- * Class GiveMarketing
- * 营销赠送
- * @Author: lun
- * @DateTime: 2021/9/30 0030 14:53
- * @Copyright: copyright (c) 2021 广东七件事集团
- * @package common\logic\order\marketing
- */
- class GiveMarketing extends BaseMarketing
- {
- public function execute($form)
- {
- }
- /**
- * 赠送计算
- * @Author: lun
- * @DateTime: 2021/10/6 0006 10:55
- * @Copyright: copyright (c) 2021 广东七件事集团
- * @param $item
- * @param $form
- * @return mixed
- */
- public static function compute($item, &$form, &$extra = [])
- {
- // 遍历商户商品
- $type_code = ['score', 'balance'];
- if(isset($extra['give_type'])) $type_code = $extra['give_type'];
- $user_id = $form['user_id'];
- $user_level = User::find()->where(['id' => $user_id])->select('level')->scalar() ?? 0;
- foreach ($item['goods'] as $goods_id => $goods) {
- foreach ($type_code as $code) {
- if (empty($form['sku'][$goods['goods_id']]['goods']['extra'][$code . '_give_setting'])) continue;
- //判断是否开启积分/余额赠送
- $give_setting = $form['sku'][$goods['goods_id']]['goods']['extra'][$code . '_give_setting'];
- $settingArr = Json::decode($give_setting, true);
- if (isset($settingArr['enable_give_' . $code]) && empty($settingArr['enable_give_' . $code])) continue;
- if (empty($settingArr['code']) || $settingArr['code'] != $code) continue;
- $give_settlement = $settingArr['settlement'] ?? 1;
- if (empty($settingArr['give_num']) || $settingArr['give_num'] <= 0) continue;// 配置为0直接退出
- $enable_limit_level = $settingArr['enable_limit_level'] ?? 0;
- $limit_level = $settingArr['limit_level'] ?? [];
- if($enable_limit_level == 1 && !in_array($user_level, (array)$limit_level)){
- continue;
- }
- foreach ($goods['goods_details'] as $k => $goods_detail) {
- // give_type:1=固定值,2=百分比
- if ($settingArr['give_type'] == 1) {
- $give_num = bcmul($settingArr['give_num'], $goods['num'], 2);
- } elseif ($settingArr['give_type'] == 2) {
- $give_num = bcdiv($settingArr['give_num'] * $goods_detail['price'] * $goods['num'], 100, 2);
- }
- if (!empty($give_num) && $give_num > 0) {
- $item['goods'][$goods_id]['goods_details'][$k]['marketing']['give_' . $settingArr['code']] = $give_num;
- $item['goods'][$goods_id]['goods_details'][$k]['marketing']['give_' . $settingArr['code'] . '_settlement'] = $give_settlement;
- $item['goods'][$goods_id]['goods_details'][$k]['marketing'][$settingArr['code'].'_enable_limit_level'] = $enable_limit_level;
- $item['goods'][$goods_id]['goods_details'][$k]['marketing'][$settingArr['code'].'_limit_level'] = $limit_level;
- }
- }
- }
- }
- $item = self::handleDigital($item, $form,$extra);
- return $item;
- }
- /**
- * 处理数字币赠送
- * @param $item
- * @param $form
- * @param array $extra
- * @return
- */
- private static function handleDigital($item, &$form,&$extra = [])
- {
- $give_score_settlement = 1;
- foreach($item['goods'] as $goods_id =>$goods){
- $give_setting = $form['sku'][$goods['goods_id']]['goods']['extra']['digital_give_setting'] ?? 0;// 满减金额
- if (empty($give_setting)) continue;
- $settingArr = Json::decode($give_setting, true);
- if(!empty($settingArr['code']) && $settingArr['code']=='digital') $give_score_settlement = $settingArr['settlement']??1;
- if (empty($settingArr['give_num']) || $settingArr['give_num'] <= 0 || !$settingArr['is_enable']) continue; // 配置为0直接退出
- foreach($goods['goods_details'] as $k => $goods_detail){
- // give_type:1=固定值,2=百分比
- if ($settingArr['give_type'] == 1) {
- $give_num = $settingArr['give_num'] * $goods['num'];
- } elseif ($settingArr['give_type'] == 2) {
- $give_num = bcdiv($settingArr['give_num'] * $goods_detail['price'] * $goods['num'], 100, 2);
- }
- if (!empty($give_num) && $give_num > 0) {
- $item['goods'][$goods_id]['goods_details'][$k]['marketing']['give_' . $settingArr['code']] = $give_num;
- $item['goods'][$goods_id]['goods_details'][$k]['marketing']['give_' . $settingArr['code'].'_settlement'] = $give_score_settlement;
- }
- }
- }
- return $item;
- }
- }
|