| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- <?php
- namespace addons\MembersCard\common\logic\order;
- use addons\Coupon\AddonConfig;
- use common\enums\AddonsEnum;
- use common\enums\StatusEnum;
- use Exception;
- use yii\helpers\Json;
- use common\traits\ErrorTrait;
- use addons\MembersCard\common\enums\MembersCardEnum;
- use addons\MembersCard\common\models\MembersCardGive;
- use addons\MembersCard\common\models\MembersCard;
- /**
- * 亲友卡
- * @Author bing
- * @DateTime 2021-09-27 19:07:32
- * @copyright: Copyright (c) 2020 广东七件事集团
- */
- class MemberCardMarketing
- {
- use ErrorTrait;
- public static function compute($item, &$form, &$extra = [])
- {
- try {
- $mall_id = $item['mch_order_info']['mall_id'];
- $user_id = $item['mch_order_info']['user_id'];
- $time = $_SERVER['REQUEST_TIME'];
- $config = \Yii::$app->services->setting->addons->get($mall_id, MembersCardEnum::ADDONS_NAME, 'basic');
- if(empty($config['is_enable'])){
- return $item;
- }
- $where[] = ['mall_id' => $mall_id];
- $where[] = ['status' => StatusEnum::ENABLED];
- $where[] = ['user_id' => $user_id];
- $where[] = ['>=','expired_at',$time];
- $params['where'] = $where;
- $params['select'] = 'id,card_id,discount,expired_at,created_at';
- $params['order'] = 'discount asc';
- $lists = MembersCardGive::lists($params);
- $data = is_array($form->data) ? $form->data : Json::decode($form->data, true);
- // if (empty($data['user_card_ids'])) return $item;
- $total_deduct_money = 0;
- $form->marketing['deduct']['member_card']['discount_money'] = 0;
- foreach($lists as $key => &$list){
- $list['name'] = '';
- $list['background_url'] = '';
- $members_card = MembersCard::findOne(['id'=>$list['card_id']]);
- if($members_card){
- $list['name'] = $members_card['name'];
- $list['background_url'] = $members_card['background_url'];
- if(!empty($form['is_virtual']) && empty($members_card['is_enable_virtual'])){
- unset($lists[$key]);
- continue;
- }
- }
- $list['expired_at'] = date("Y-m-d",$list['expired_at']);
- $list['created_at'] = date("Y-m-d",$list['created_at']);
- if(!empty($data['user_card_ids']) && in_array($list['id'],$data['user_card_ids'])){
- // $total_deduct_money = $item['mch_order_info']['pay_money'] * (10-$list['discount']) / 10;
- foreach ($item['goods'] as &$row) {
- foreach ($row['goods_details'] as &$v) {
- $member_price = sprintf('%.2f', $v['price'] * $list['discount'] / 10);
- if($v['price']>$member_price) {
- $cha = ($v['price'] - $member_price) * $v['num'];//差额
- $cha = bcadd(0, $cha, 2);
- if($cha > $v['goods_price']){
- $cha = $v['goods_price'];
- }
- $total_deduct_money += $cha;
- $v['goods_price'] -= $cha;
- // $v['marketing']['member_price_deduct'] = $cha;
- $v['marketing']['pay_money'] = bcadd($v['goods_price'], 0, 2);
- $v['marketing']['user_card_id'] = json_encode([
- 'card_give_id' => $list['id'],
- 'deduct_money' => $cha,
- ]);
- }
- }
- $row['goods_price'] -= bcadd($total_deduct_money, 0, 2);
- }
- }
- }
- $lists = array_values($lists);
- $form->marketing['deduct']['member_card']['list'] = $lists;
- $item['mch_order_info']['goods_price'] = bcsub($item['mch_order_info']['goods_price'], $total_deduct_money, 2);
- $item['mch_order_info']['pay_money'] = bcsub($item['mch_order_info']['pay_money'], $total_deduct_money, 2);
- //$form['total_pay_money'] -= $total_deduct_money;
- $form->marketing['deduct']['member_card']['discount_money'] = -bcadd($total_deduct_money, 0, 2);
- return $item;
- } catch (Exception $e) {
- MemberCardMarketing::setStaticError( $e->getMessage());
- return false;
- }
- }
- public static function storeCashierCompute($mall_id,$user_id, $user_card_id,&$dis_pay_money, &$deduct_money,$user_card_money){
- $config = \Yii::$app->services->setting->addons->get($mall_id, MembersCardEnum::ADDONS_NAME, 'basic');
- if($config && !empty($config['is_enable'])){
- $members_card_give = MembersCardGive::findOne(['id'=>$user_card_id]);
- if($members_card_give){
- $deduct_money = $user_card_money * (10 - $members_card_give['discount']) / 10;
- $dis_pay_money = $dis_pay_money - $deduct_money;
- $deduct_money = bcmul($deduct_money,1,2);
- $dis_pay_money = bcmul($dis_pay_money,1,2);
- }
- }
- }
- public static function getMemberCardList($user_id,$mall_id){
- $config = \Yii::$app->services->setting->addons->get($mall_id, MembersCardEnum::ADDONS_NAME, 'basic');
- if(!$config || empty($config['is_enable'])){
- return [];
- }
- $where[] = ['mall_id' => $mall_id];
- $where[] = ['status' => StatusEnum::ENABLED];
- $where[] = ['user_id' => $user_id];
- $where[] = ['>=','expired_at',time()];
- $params['where'] = $where;
- $params['select'] = 'id,card_id,discount,expired_at,created_at';
- $params['order'] = 'discount asc';
- $lists = MembersCardGive::lists($params);
- foreach($lists as &$list){
- $list['expired_at'] = date("Y-m-d",$list['expired_at']);
- $list['created_at'] = date("Y-m-d",$list['created_at']);
- $list['name'] = '';
- $list['background_url'] = '';
- $members_card = MembersCard::findOne(['id'=>$list['card_id']]);
- if($members_card){
- $list['name'] = $members_card['name'];
- $list['background_url'] = $members_card['background_url'];
- }
- }
- return $lists;
- }
- }
|