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; } }