MemberCardMarketing.php 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. <?php
  2. namespace addons\MembersCard\common\logic\order;
  3. use addons\Coupon\AddonConfig;
  4. use common\enums\AddonsEnum;
  5. use common\enums\StatusEnum;
  6. use Exception;
  7. use yii\helpers\Json;
  8. use common\traits\ErrorTrait;
  9. use addons\MembersCard\common\enums\MembersCardEnum;
  10. use addons\MembersCard\common\models\MembersCardGive;
  11. use addons\MembersCard\common\models\MembersCard;
  12. /**
  13. * 亲友卡
  14. * @Author bing
  15. * @DateTime 2021-09-27 19:07:32
  16. * @copyright: Copyright (c) 2020 广东七件事集团
  17. */
  18. class MemberCardMarketing
  19. {
  20. use ErrorTrait;
  21. public static function compute($item, &$form, &$extra = [])
  22. {
  23. try {
  24. $mall_id = $item['mch_order_info']['mall_id'];
  25. $user_id = $item['mch_order_info']['user_id'];
  26. $time = $_SERVER['REQUEST_TIME'];
  27. $config = \Yii::$app->services->setting->addons->get($mall_id, MembersCardEnum::ADDONS_NAME, 'basic');
  28. if(empty($config['is_enable'])){
  29. return $item;
  30. }
  31. $where[] = ['mall_id' => $mall_id];
  32. $where[] = ['status' => StatusEnum::ENABLED];
  33. $where[] = ['user_id' => $user_id];
  34. $where[] = ['>=','expired_at',$time];
  35. $params['where'] = $where;
  36. $params['select'] = 'id,card_id,discount,expired_at,created_at';
  37. $params['order'] = 'discount asc';
  38. $lists = MembersCardGive::lists($params);
  39. $data = is_array($form->data) ? $form->data : Json::decode($form->data, true);
  40. // if (empty($data['user_card_ids'])) return $item;
  41. $total_deduct_money = 0;
  42. $form->marketing['deduct']['member_card']['discount_money'] = 0;
  43. foreach($lists as $key => &$list){
  44. $list['name'] = '';
  45. $list['background_url'] = '';
  46. $members_card = MembersCard::findOne(['id'=>$list['card_id']]);
  47. if($members_card){
  48. $list['name'] = $members_card['name'];
  49. $list['background_url'] = $members_card['background_url'];
  50. if(!empty($form['is_virtual']) && empty($members_card['is_enable_virtual'])){
  51. unset($lists[$key]);
  52. continue;
  53. }
  54. }
  55. $list['expired_at'] = date("Y-m-d",$list['expired_at']);
  56. $list['created_at'] = date("Y-m-d",$list['created_at']);
  57. if(!empty($data['user_card_ids']) && in_array($list['id'],$data['user_card_ids'])){
  58. // $total_deduct_money = $item['mch_order_info']['pay_money'] * (10-$list['discount']) / 10;
  59. foreach ($item['goods'] as &$row) {
  60. foreach ($row['goods_details'] as &$v) {
  61. $member_price = sprintf('%.2f', $v['price'] * $list['discount'] / 10);
  62. if($v['price']>$member_price) {
  63. $cha = ($v['price'] - $member_price) * $v['num'];//差额
  64. $cha = bcadd(0, $cha, 2);
  65. if($cha > $v['goods_price']){
  66. $cha = $v['goods_price'];
  67. }
  68. $total_deduct_money += $cha;
  69. $v['goods_price'] -= $cha;
  70. // $v['marketing']['member_price_deduct'] = $cha;
  71. $v['marketing']['pay_money'] = bcadd($v['goods_price'], 0, 2);
  72. $v['marketing']['user_card_id'] = json_encode([
  73. 'card_give_id' => $list['id'],
  74. 'deduct_money' => $cha,
  75. ]);
  76. }
  77. }
  78. $row['goods_price'] -= bcadd($total_deduct_money, 0, 2);
  79. }
  80. }
  81. }
  82. $lists = array_values($lists);
  83. $form->marketing['deduct']['member_card']['list'] = $lists;
  84. $item['mch_order_info']['goods_price'] = bcsub($item['mch_order_info']['goods_price'], $total_deduct_money, 2);
  85. $item['mch_order_info']['pay_money'] = bcsub($item['mch_order_info']['pay_money'], $total_deduct_money, 2);
  86. //$form['total_pay_money'] -= $total_deduct_money;
  87. $form->marketing['deduct']['member_card']['discount_money'] = -bcadd($total_deduct_money, 0, 2);
  88. return $item;
  89. } catch (Exception $e) {
  90. MemberCardMarketing::setStaticError( $e->getMessage());
  91. return false;
  92. }
  93. }
  94. public static function storeCashierCompute($mall_id,$user_id, $user_card_id,&$dis_pay_money, &$deduct_money,$user_card_money){
  95. $config = \Yii::$app->services->setting->addons->get($mall_id, MembersCardEnum::ADDONS_NAME, 'basic');
  96. if($config && !empty($config['is_enable'])){
  97. $members_card_give = MembersCardGive::findOne(['id'=>$user_card_id]);
  98. if($members_card_give){
  99. $deduct_money = $user_card_money * (10 - $members_card_give['discount']) / 10;
  100. $dis_pay_money = $dis_pay_money - $deduct_money;
  101. $deduct_money = bcmul($deduct_money,1,2);
  102. $dis_pay_money = bcmul($dis_pay_money,1,2);
  103. }
  104. }
  105. }
  106. public static function getMemberCardList($user_id,$mall_id){
  107. $config = \Yii::$app->services->setting->addons->get($mall_id, MembersCardEnum::ADDONS_NAME, 'basic');
  108. if(!$config || empty($config['is_enable'])){
  109. return [];
  110. }
  111. $where[] = ['mall_id' => $mall_id];
  112. $where[] = ['status' => StatusEnum::ENABLED];
  113. $where[] = ['user_id' => $user_id];
  114. $where[] = ['>=','expired_at',time()];
  115. $params['where'] = $where;
  116. $params['select'] = 'id,card_id,discount,expired_at,created_at';
  117. $params['order'] = 'discount asc';
  118. $lists = MembersCardGive::lists($params);
  119. foreach($lists as &$list){
  120. $list['expired_at'] = date("Y-m-d",$list['expired_at']);
  121. $list['created_at'] = date("Y-m-d",$list['created_at']);
  122. $list['name'] = '';
  123. $list['background_url'] = '';
  124. $members_card = MembersCard::findOne(['id'=>$list['card_id']]);
  125. if($members_card){
  126. $list['name'] = $members_card['name'];
  127. $list['background_url'] = $members_card['background_url'];
  128. }
  129. }
  130. return $lists;
  131. }
  132. }