GiveMarketing.php 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. <?php
  2. namespace common\logic\order\marketing;
  3. use common\models\goods\GoodsExtra;
  4. use common\models\user\User;
  5. use yii\helpers\Json;
  6. /**
  7. * Class GiveMarketing
  8. * 营销赠送
  9. * @Author: lun
  10. * @DateTime: 2021/9/30 0030 14:53
  11. * @Copyright: copyright (c) 2021 广东七件事集团
  12. * @package common\logic\order\marketing
  13. */
  14. class GiveMarketing extends BaseMarketing
  15. {
  16. public function execute($form)
  17. {
  18. }
  19. /**
  20. * 赠送计算
  21. * @Author: lun
  22. * @DateTime: 2021/10/6 0006 10:55
  23. * @Copyright: copyright (c) 2021 广东七件事集团
  24. * @param $item
  25. * @param $form
  26. * @return mixed
  27. */
  28. public static function compute($item, &$form, &$extra = [])
  29. {
  30. // 遍历商户商品
  31. $type_code = ['score', 'balance'];
  32. if(isset($extra['give_type'])) $type_code = $extra['give_type'];
  33. $user_id = $form['user_id'];
  34. $user_level = User::find()->where(['id' => $user_id])->select('level')->scalar() ?? 0;
  35. foreach ($item['goods'] as $goods_id => $goods) {
  36. foreach ($type_code as $code) {
  37. if (empty($form['sku'][$goods['goods_id']]['goods']['extra'][$code . '_give_setting'])) continue;
  38. //判断是否开启积分/余额赠送
  39. $give_setting = $form['sku'][$goods['goods_id']]['goods']['extra'][$code . '_give_setting'];
  40. $settingArr = Json::decode($give_setting, true);
  41. if (isset($settingArr['enable_give_' . $code]) && empty($settingArr['enable_give_' . $code])) continue;
  42. if (empty($settingArr['code']) || $settingArr['code'] != $code) continue;
  43. $give_settlement = $settingArr['settlement'] ?? 1;
  44. if (empty($settingArr['give_num']) || $settingArr['give_num'] <= 0) continue;// 配置为0直接退出
  45. $enable_limit_level = $settingArr['enable_limit_level'] ?? 0;
  46. $limit_level = $settingArr['limit_level'] ?? [];
  47. if($enable_limit_level == 1 && !in_array($user_level, (array)$limit_level)){
  48. continue;
  49. }
  50. foreach ($goods['goods_details'] as $k => $goods_detail) {
  51. // give_type:1=固定值,2=百分比
  52. if ($settingArr['give_type'] == 1) {
  53. $give_num = bcmul($settingArr['give_num'], $goods['num'], 2);
  54. } elseif ($settingArr['give_type'] == 2) {
  55. $give_num = bcdiv($settingArr['give_num'] * $goods_detail['price'] * $goods['num'], 100, 2);
  56. }
  57. if (!empty($give_num) && $give_num > 0) {
  58. $item['goods'][$goods_id]['goods_details'][$k]['marketing']['give_' . $settingArr['code']] = $give_num;
  59. $item['goods'][$goods_id]['goods_details'][$k]['marketing']['give_' . $settingArr['code'] . '_settlement'] = $give_settlement;
  60. $item['goods'][$goods_id]['goods_details'][$k]['marketing'][$settingArr['code'].'_enable_limit_level'] = $enable_limit_level;
  61. $item['goods'][$goods_id]['goods_details'][$k]['marketing'][$settingArr['code'].'_limit_level'] = $limit_level;
  62. }
  63. }
  64. }
  65. }
  66. $item = self::handleDigital($item, $form,$extra);
  67. return $item;
  68. }
  69. /**
  70. * 处理数字币赠送
  71. * @param $item
  72. * @param $form
  73. * @param array $extra
  74. * @return
  75. */
  76. private static function handleDigital($item, &$form,&$extra = [])
  77. {
  78. $give_score_settlement = 1;
  79. foreach($item['goods'] as $goods_id =>$goods){
  80. $give_setting = $form['sku'][$goods['goods_id']]['goods']['extra']['digital_give_setting'] ?? 0;// 满减金额
  81. if (empty($give_setting)) continue;
  82. $settingArr = Json::decode($give_setting, true);
  83. if(!empty($settingArr['code']) && $settingArr['code']=='digital') $give_score_settlement = $settingArr['settlement']??1;
  84. if (empty($settingArr['give_num']) || $settingArr['give_num'] <= 0 || !$settingArr['is_enable']) continue; // 配置为0直接退出
  85. foreach($goods['goods_details'] as $k => $goods_detail){
  86. // give_type:1=固定值,2=百分比
  87. if ($settingArr['give_type'] == 1) {
  88. $give_num = $settingArr['give_num'] * $goods['num'];
  89. } elseif ($settingArr['give_type'] == 2) {
  90. $give_num = bcdiv($settingArr['give_num'] * $goods_detail['price'] * $goods['num'], 100, 2);
  91. }
  92. if (!empty($give_num) && $give_num > 0) {
  93. $item['goods'][$goods_id]['goods_details'][$k]['marketing']['give_' . $settingArr['code']] = $give_num;
  94. $item['goods'][$goods_id]['goods_details'][$k]['marketing']['give_' . $settingArr['code'].'_settlement'] = $give_score_settlement;
  95. }
  96. }
  97. }
  98. return $item;
  99. }
  100. }