calculate($calculate_data); if ($calculate_data[ 'code' ] < 0) return $calculate_data; if (isset($calculate_data[ 'code' ]) && $calculate_data[ 'code' ] < 0) return $calculate_data; $check_error = $this->checkError(); if ($check_error[ 'code' ] < 0) { return $check_error; } $calculate_data = $calculate_data[ 'data' ]; model('store_cashier_order')->startTrans(); try { $member_id = $calculate_data[ 'member_id' ] ?? 0; $pay = new Pay(); $out_trade_no = $pay->createOutTradeNo($member_id); $site_id = $calculate_data[ 'site_id' ]; $order_no = $this->createOrderNo($site_id, $member_id); $site_info = $calculate_data[ 'site_info' ]; $site_type = $site_info[ 'site_type' ]; $order_name = $calculate_data[ 'order_name' ] ?? ''; $member_info = $calculate_data[ 'member_info' ] ?? []; $nickname = $member_info[ 'nickname' ] ?? '';//会员昵称 $headimg = $member_info[ 'headimg' ] ?? ''; $mobile = $member_info['mobile'] ?? ''; $nickname = !empty($nickname) ? $nickname : $mobile; $goods_list = $calculate_data[ 'goods_list' ] ?? []; $pay_money = $calculate_data[ 'pay_money' ] ?? 0; $order_status = 'topay';//订单状态 $store_id = $calculate_data[ 'store_id' ] ?? 0; $store_info = $calculate_data[ 'store_info' ] ?? []; $store_name = $store_info[ 'store_name' ] ?? ''; $goods_id_array = array_unique(array_column($goods_list, 'goods_id')); $goods_ids = ',' . implode(',', $goods_id_array) . ','; $extend = $calculate_data[ 'extend' ] ?? []; $order_type = $calculate_data[ 'order_type' ]; $cashier_type = $calculate_data[ 'cashier_type' ]; $sell_time = $calculate_data[ 'create_time' ] ?? 0; if ($sell_time == 0) { $sell_time = time(); } else { $sell_time = strtotime($sell_time); } $operator = $calculate_data['operator'] ?? []; $operator_id = $operator['uid'] ?? 0; $operator_name = $operator['username'] ?? ''; //创建订单 $data_order = [ 'order_no' => $order_no, 'site_id' => $site_id, 'site_name' => $site_info[ 'site_name' ], 'order_name' => $order_name, 'out_trade_no' => $out_trade_no, 'status' => $order_status, 'member_id' => $member_id, 'nickname' => $nickname, 'headimg' => $headimg, 'mobile' => $mobile, 'pay_money' => $calculate_data[ 'pay_money' ], 'goods_money' => $calculate_data[ 'goods_money' ], 'real_goods_money' => $calculate_data[ 'real_goods_money' ], 'order_money' => $calculate_data[ 'order_money' ], 'store_id' => $store_id, 'store_name' => $store_name, 'goods_ids' => $goods_ids, 'create_time' => time(), 'sell_time' => $sell_time, 'order_type' => $order_type, 'remark' => $calculate_data[ 'remark' ] ?? '', 'cashier_type' => $cashier_type, 'site_type' => $calculate_data[ 'app_module' ] ?? '', 'operator_id' => $operator_id, 'operator_name' => $operator_name, ]; switch($order_type){ case 'goods': $is_can_refund = 1; break; case 'card': $is_can_refund = 1; break; case 'recharge': $is_can_refund = 0; break; } $data_order['is_can_refund'] = $is_can_refund ?? 0; //店铺优惠 $discount_money = $calculate_data['coupon_money'] ?? 0; //抵扣金额 $balance_money = $calculate_data['balance_money'] ?? 0; $point_money = $calculate_data['point_money'] ?? 0; $hongbao_money = $calculate_data['hongbao_money'] ?? 0; $offset_money = $calculate_data['offset_money'] ?? 0; // $offset_money = $balance_money + $point_money + $hongbao_money; $order_pay_data = array( 'total_balance' => $calculate_data['total_balance'] ?? 0,//总余额 'point' => $calculate_data['point'] ?? 0, 'point_money' => $calculate_data['point_money'] ?? 0, 'coupon_id' => $calculate_data['coupon_id'] ?? 0, 'coupon_money' => $calculate_data['coupon_money'] ?? 0, 'hongbao_money' => $calculate_data['hongbao_money'] ?? 0, 'hongbao_id' => $calculate_data['hongbao_id'] ?? '', 'discount_money' => $discount_money, 'offset_money' => $offset_money, ); $data_order = array_merge($data_order, $order_pay_data); $order_id = model('store_cashier_order')->add($data_order); $calculate_data[ 'order_no' ] = $order_no; $calculate_data[ 'out_trade_no' ] = $out_trade_no; $order_goods_id_map = []; $can_refund_num = 0; $store_stock_model = new Stock(); foreach ($goods_list as $goods_k => $goods_info) { $card_item_id = $goods_info[ 'card_item_id' ] ?? 0; //订单项目表 $data_order_goods = [ 'order_id' => $order_id, 'site_id' => $site_id, 'member_id' => $member_id, 'goods_id' => $goods_info[ 'goods_id' ], 'sku_id' => $goods_info[ 'sku_id' ], 'goods_name' => $goods_info[ 'goods_name' ], 'goods_image' => $goods_info[ 'goods_image' ], 'spec_name' => $goods_info[ 'spec_name' ], 'price' => $goods_info[ 'price' ], 'num' => $goods_info[ 'num' ], 'goods_money' => $goods_info[ 'goods_money' ], 'card_item_id' => $card_item_id, 'trade_type' => $goods_info[ 'trade_type' ], 'store_id' => $store_id, 'extend' => json_encode($extend), 'real_goods_money' => $goods_info['real_goods_money'], ]; $item_is_can_refund = 0; if($is_can_refund){ if($card_item_id == 0) { switch ($goods_info['trade_type']) { case '': $item_is_can_refund = 1; break; case 'oncecard': $item_is_can_refund = 1; break; case 'service': $item_is_can_refund = 1; break; } } } if($item_is_can_refund){ $can_refund_num++; } $data_order_goods['is_can_refund'] = $item_is_can_refund ?? 0; //扣除销售库存 if($order_type == 'goods'){ if(empty($goods_info['trade_type'])){ $sku_name = $goods_info[ 'goods_name' ].$goods_info[ 'spec_name' ]; $stock_params = $data_order_goods; $stock_params['sku_name'] = $sku_name; $stock_result = $store_stock_model->decSaleStock($stock_params); if($stock_result['code'] < 0){ model('store_cashier_order')->rollback(); return $stock_result; } } } $order_goods_id = model('store_cashier_order_goods')->add($data_order_goods); $goods_list[$goods_k]['order_goods_id'] = $order_goods_id; $order_goods_id_map[$goods_k] = $order_goods_id; } //轮询订单项的退款 if($can_refund_num == 0){ model('store_cashier_order')->update(['is_can_refund' => 0], [['order_id', '=', $order_id]]); } $calculate_data[ 'order_id' ] = $order_id; $calculate_data['order_goods_id_map'] = $order_goods_id_map; //赠品项 $reward_goods_list = $calculate_data['reward_goods_list'] ?? []; foreach($reward_goods_list as $k => $v){ //订单项目表 $reward_order_goods_data = [ 'order_id' => $order_id, 'site_id' => $site_id, 'member_id' => $member_id, 'goods_id' => $v[ 'goods_id' ], 'sku_id' => $v[ 'sku_id' ], 'goods_name' => $v[ 'goods_name' ], 'goods_image' => $v[ 'goods_image' ], 'spec_name' => $v[ 'spec_name' ], 'price' => $v[ 'price' ], 'num' => $v[ 'num' ], 'goods_money' => $v[ 'goods_money' ], 'card_item_id' => 0, 'trade_type' => $v[ 'trade_type' ], 'store_id' => $store_id, 'extend' => json_encode([]), 'real_goods_money' => $v['real_goods_money'], 'is_can_refund' => 0, 'is_gift' => 1 ]; $refund_order_goods_id = model('store_cashier_order_goods')->add($reward_order_goods_data); //扣除销售库存 if(empty($v['trade_type'])){ $sku_name = $v[ 'goods_name' ].$v[ 'spec_name' ]; $stock_params = $reward_order_goods_data; $stock_params['sku_name'] = $sku_name; $stock_result = $store_stock_model->decSaleStock($stock_params); if($stock_result['code'] < 0){ //赠品库存不足也无所谓 } } } //现在扣除余额 $cashier_pay_model = new CashierOrderPay(); $offset_result = $cashier_pay_model->deductOffset($calculate_data); if($offset_result['code'] < 0){ model('store_cashier_order')->rollback(); return $offset_result; } //创建奖励 $reward_result = $cashier_pay_model->rewardAction($calculate_data); if ($reward_result['code'] < 0) { model('store_cashier_order')->rollback(); return $reward_result; } model('store_cashier_order')->commit(); $res = [ 'order_id' => $order_id, 'out_trade_no' => $out_trade_no ]; // 生成整体付费支付单据 $pay->addPay($calculate_data[ 'site_id' ], $out_trade_no, $this->pay_type, $order_name, $order_name, $pay_money, '', 'CashierOrderPayNotify', ''); return $this->success($res); } catch (\Exception $e) { model('store_cashier_order')->rollback(); return $this->error('', $e->getMessage() . $e->getFile() . $e->getLine()); } } /** * 订单创建 * @param unknown $data */ // public function create($data) // { // //查询出会员相关信息 // $calculate_data = $this->calculate($data); // if ($calculate_data[ 'code' ] < 0) // return $calculate_data; // // $result = parent::create($calculate_data[ 'data' ]); // //订单创建成功 // if ($result[ 'code' ] >= 0) { // // } // return $result; // // } /** * 订单计算 * @param $data * @return mixed */ public function calculate($data) { $type = $data[ 'type' ] ?? ''; $data['site_type'] = $data['app_module']; $data = $this->initStore($data);//初始化仓库门店 // $data = $this->initMemberAddress($data); //初始化地址 $member_id = $data[ 'member_id' ] ?? 0; $data = $this->initSiteData($data); //初始化站点信息 // $data = $this->initPointConfig($data);//初始化消费返积分倍率 // $data = $this->initGrowthConfig($data);//初始化消费返成长值倍率 if ($member_id > 0) { $data = $this->initMemberAccount($data); //初始化会员账户 $data = $this->initMemberLevel($data);//初始化会员卡权益 } //商品列表信息 $calculate_result = $this->getItemList($data); if ($calculate_result[ 'code' ] < 0) { return $calculate_result; } //抵扣优惠计算 $calculate = $calculate_result['data']; $cashier_calculate_model = new CashierOrderCalculate(); $calculate_result = $cashier_calculate_model->promotionCalculate($calculate); if ($calculate_result[ 'code' ] < 0) { return $calculate_result; } return $calculate_result; } /** * 购买项列表 * @param $data * @return mixed */ public function getItemList($data) { $type = $data[ 'type' ]; $order_name = ''; $goods_list = []; $data_result = event('CashierCalculate', $data, true); if(empty($data_result)){ switch ( $type ) { case 'level'://会员卡 $data[ 'order_type' ] = 'level'; $goods_money = 0; $sku_array = $data[ 'sku_array' ]; $sku_ids = array_column($sku_array, 'member_level_id'); $sku_data_array = array_column($sku_array, null, 'member_level_id'); $member_level_condition = array ( [ 'level_id', 'in', $sku_ids ] ); $member_level_list = model('member_level')->getList($member_level_condition); if (!empty($member_level_list)) { foreach ($member_level_list as $k => $v) { $payment_rules = empty($v[ 'payment_rules' ]) ? [] : json_decode($v[ 'payment_rules' ], true); if (!empty($payment_rules)) { $item_sku_id = $v[ 'level_id' ]; $sku_item = $sku_data_array[ $v[ 'level_id' ] ]; $spec = $sku_item[ 'spec' ]; $price = $payment_rules[ $spec ]; $num = 1; $item_goods_money = $price * $num; $goods_money += $item_goods_money; switch ( $spec ) { case 'month': $spec_name = '月'; break; case 'quarter': $spec_name = '季'; break; case 'year': $spec_name = '年'; break; } $order_name = string_split($order_name, ',', $v[ 'level_name' ]); $goods_list[] = array ( 'goods_id' => $item_sku_id, 'sku_id' => $spec, 'price' => $price, 'num' => $num, 'goods_money' => $item_goods_money, 'goods_name' => $v[ 'level_name' ], 'goods_image' => '', 'spec_name' => $spec_name ?? '', 'trade_type' => 'level' ); } } } $data[ 'goods_money' ] = $goods_money; $order_money = $goods_money; $pay_money = $goods_money; $data[ 'goods_list' ] = $goods_list; $data[ 'order_name' ] = $order_name; $data[ 'order_money' ] = $order_money; $data[ 'pay_money' ] = $pay_money; break; case 'goods': $data[ 'order_type' ] = 'goods'; //处理产品数据 $sku_array = $data[ 'sku_array' ] ?? []; //消费分为产品和买单(暂) $product_id_array = []; $money_array = [];//买单 foreach ($sku_array as $k => $v) { $sku_id = $v[ 'sku_id' ] ?? 0; if ($sku_id > 0) { $product_id_array[] = $v; } $money = $v[ 'money' ] ?? 0; if ($money > 0) { $money_array[] = $money; } } $data[ 'product_array' ] = $product_id_array; $calculate_result = $this->toCalculate($data); if ($calculate_result[ 'code' ] < 0) { return $calculate_result; } $data = $calculate_result[ 'data' ]; //money_array $data[ 'money_array' ] = $money_array; $calculate_result = $this->moneyCalculate($data); if ($calculate_result[ 'code' ] < 0) { return $calculate_result; } $goods_list = $calculate_result['data']['goods_list'] ?? []; if(empty($goods_list)) return $this->error([], '缺少必填参数商品数据'); $data = $calculate_result[ 'data' ]; break; case 'card'://卡项 $data[ 'order_type' ] = 'card'; $shop_goods_list_result = $this->cardCalculate($data); if ($shop_goods_list_result[ 'code' ] < 0) { return $shop_goods_list_result; } $data = $shop_goods_list_result[ 'data' ]; break; } }else{ $data = $data_result['data']; } return $this->success($data); } /** * 待付款订单 * @param $data * @return mixed */ public function orderPayment($data) { $data[ 'is_payment' ] = true; $calculate_data = $this->calculate($data); if ($calculate_data[ 'code' ] < 0) return $calculate_data; return $calculate_data; } /** * 个性化计算 * @param $data * @return mixed */ public function toCalculate($data) { $product_array = $data[ 'product_array' ] ?? []; if (!empty($product_array)) { $shop_goods_list_result = $this->getShopGoodsList($data); if ($shop_goods_list_result[ 'code' ] < 0) { return $shop_goods_list_result; } $data = $shop_goods_list_result[ 'data' ]; //商品部分的计算 $data = $this->goodsCalculate($data); //卡项抵消 $delivery_money = $data[ 'delivery_money' ] ?? 0; $real_goods_money = $data[ 'real_goods_money' ] ?? $data[ 'goods_money' ]; $order_money = $real_goods_money + $delivery_money; $pay_money = $order_money; $data[ 'pay_money' ] = $pay_money; //总结计算 $data[ 'order_money' ] = $order_money; } return $this->success($data); } /** * 卡项 * @param $data */ public function cardCalculate($data) { $store_id = $data[ 'store_id' ]; $sku_array = $data[ 'sku_array' ]; $sku_ids = array_column($sku_array, 'sku_id'); $sku_num_array = array_column($sku_array, 'num', 'sku_id'); // $sku_ids = $data['sku_ids'];//sku_id数组weight $site_id = $data[ 'site_id' ]; $field = 'gs.site_id,gs.goods_id,gs.sku_id,gs.goods_name,gs.sku_name,gs.spec_name,gs.introduction,g.goods_image,gsd.stock,gs.price,gs.discount_price,gs.line_price, g.is_dec_stock,g.one_fenxiao_switch,g.one_fenxiao_way,g.one_fenxiao_commission,g.one_fenxiao_remark,g.two_fenxiao_switch,g.two_fenxiao_way,g.two_fenxiao_commission, g.two_fenxiao_remark,g.promotion_type,g.fenxiao_bind,g.fenxiao_qualification,g.fenxiao_withdraw_step, g.is_virtual,g.support_trade_type,g.action_type,g.action_link,g.delivery_type,g.delivery_unity_price,g.delivery_template_data,g.delivery_template_id, g.delivery_calc_type,g.virtual_verify_id, g.refund_mode,g.min_buy,g.max_buy,gs.weight,gs.volume,g.promotion_id,g.manjian_id, gs.is_consume_discount,gs.member_price,gs.discount_config,gs.discount_method,gs.card_discount_method, g.goods_type,g.is_need_yuyue,g.yuyue_need_pay,g.service_length,(gsd.sale_num + gsd.virtual_sale) as sale_num'; $alias = 'gs'; $join = [ [ 'goods g', 'g.goods_id = gs.goods_id', 'inner' ], [ 'goods_sku_data gsd', 'gsd.sku_id = gs.sku_id', 'inner' ], ]; $goods_condition = [ [ 'gs.is_delete', '=', 0 ], // [ 'gs.goods_state', '=', 1 ], [ 'gs.sku_id', 'in', $sku_ids ], [ 'gs.site_id', '=', $site_id ] ]; $goods_list = model('goods_sku')->getList($goods_condition, $field, '', $alias, $join); $order_name = ''; $goods_num = 0; foreach ($goods_list as $k => $v) { $sku_id = $v[ 'sku_id' ]; $order_name = string_split($order_name, ',', $v[ 'goods_name' ]); $item_num = $sku_num_array[ $sku_id ] ?? 1; $goods_num += $item_num; $goods_info = $v; $is_virtual = $is_virtual ?? $v[ 'is_virtual' ]; $action_type = $v[ 'action_type' ]; $goods_info[ 'trade_type' ] = $action_type;//业务类型 $goods_info[ 'num' ] = $item_num; $goods_list[ $k ] = $goods_info; } $data[ 'goods_list' ] = $goods_list; $data[ 'order_name' ] = $order_name; $data[ 'goods_num' ] = $goods_num; $goods_list = $data[ 'goods_list' ]; //具备某个参数(控制是否是单品活动) //计算订单总额 ,订单总优惠 , $goods_money = 0; $real_goods_money = 0; foreach ($goods_list as $k => $v) { // 计算单价 可能情况 (折扣价 会员价) $goods_item = $v; //商品类主体中应该封装一个函数用于获取商品价格(可能还会有关联会员价 满减 折扣....) $price = moneyFormat($goods_item[ 'price' ]);// 我也不确定会用哪个价格 大概率是用销售价(字段名称不太合法) $member_price_result = $this->memberPrice($v, $data); if ($member_price_result[ 'code' ] >= 0) { $price = $member_price_result[ 'data' ]; $goods_item[ 'is_member_price' ] = true; } $goods_item[ 'price' ] = $price; $num = $goods_item[ 'num' ];//购买数量 $item_goods_money = $price * $num;//商品总额() $min_buy = $goods_item[ 'min_buy' ]; $max_buy = $goods_item[ 'max_buy' ]; if ($min_buy > 0 && $min_buy > $num) { $this->setError('GOODS_LESS_MIN_NUM'); } if ($max_buy > 0 && $max_buy < $num) { $this->setError('GOODS_OUT_MAX_NUM'); } $goods_money += $item_goods_money; $item_real_goods_money = $item_goods_money; $real_goods_money += $item_real_goods_money; $goods_item[ 'goods_money' ] = $item_goods_money; $goods_item[ 'real_goods_money' ] = $item_real_goods_money; $goods_list[ $k ] = $goods_item; } $data[ 'goods_list' ] = $goods_list; $data[ 'goods_money' ] = $goods_money; $data[ 'real_goods_money' ] = $real_goods_money; $delivery_money = $data[ 'delivery_money' ] ?? 0; $order_money = $real_goods_money + $delivery_money; $pay_money = $order_money; //总结计算 $data[ 'order_money' ] = $order_money; $data[ 'pay_money' ] = $pay_money; return $this->success($data); } /** * 买单计算 * @param $data */ public function moneyCalculate($data) { $money_array = $data[ 'money_array' ]; if (!empty($money_array)) { $goods_money = $data[ 'goods_money' ] ?? 0; $order_name = $data[ 'order_name' ] ?? ''; $order_money = $data[ 'order_money' ] ?? 0; $pay_money = $data[ 'pay_money' ] ?? 0; $goods_list = $data['goods_list'] ?? []; $goods_image = 'upload/cashier/cashier-order-money.png'; foreach ($money_array as $k => $v) { $num = 1; $item_price = $v; if($item_price > 0){ $item_goods_money = $item_price * $num; $item_order_name = $item_goods_money . '元买单'; $goods_list[] = array ( 'goods_id' => 0, 'sku_id' => 0, 'price' => $item_price, 'num' => 1, 'goods_money' => $item_goods_money, 'goods_name' => $item_order_name, 'goods_image' => $goods_image, 'spec_name' => '', 'trade_type' => 'money', 'real_goods_money' => $item_goods_money ); $goods_money += $item_goods_money; $order_money += $order_money; $pay_money += $pay_money; $order_name = string_split($order_name, ',', $item_order_name); } } $data[ 'goods_money' ] = $goods_money; $data[ 'real_goods_money' ] = $goods_money; $data[ 'goods_list' ] = $goods_list; $data[ 'order_name' ] = $order_name; $data[ 'order_money' ] = $goods_money; $data[ 'pay_money' ] = $goods_money; } return $this->success($data); } public function goodsCalculate($data) { $site_id = $data[ 'site_id' ]; $goods_list = $data[ 'goods_list' ]; $fans_id = $data[ 'fans_id' ] ?? 0; $sku_array = $data[ 'product_array' ]; //具备某个参数(控制是否是单品活动) //计算订单总额 ,订单总优惠 , $goods_money = 0; $real_goods_money = 0; foreach ($goods_list as $k => $v) { // 计算单价 可能情况 (折扣价 会员价) $goods_item = $v; $sku_id = $v[ 'sku_id' ]; //商品类主体中应该封装一个函数用于获取商品价格(可能还会有关联会员价 满减 折扣....) $price = moneyFormat($goods_item[ 'price' ]);// 我也不确定会用哪个价格 大概率是用销售价(字段名称不太合法) $member_price_result = $this->memberPrice($v, $data); if ($member_price_result[ 'code' ] >= 0) { $price = $member_price_result[ 'data' ]; $goods_item[ 'is_member_price' ] = true; } $num = $goods_item[ 'num' ];//购买数量 $item_goods_money = $price * $num;//商品总额() $goods_item[ 'price' ] = $price; $goods_item[ 'goods_money' ] = $item_goods_money; $goods_item[ 'fans_id' ] = $fans_id; $goods_item[ 'site_id' ] = $site_id; $min_buy = $goods_item[ 'min_buy' ]; $max_buy = $goods_item[ 'max_buy' ]; if ($min_buy > 0 && $min_buy > $num) $this->setError('GOODS_LESS_MIN_NUM'); if ($max_buy > 0 && $max_buy < $num) $this->setError('GOODS_OUT_MAX_NUM'); $item_real_goods_money = $goods_item[ 'goods_money' ]; $goods_item[ 'real_goods_money' ] = $item_real_goods_money; //卡项 $goods_item = $this->itemCardCalculate($goods_item, $data); if (empty($goods_item)) { unset($goods_list[ $k ]); } else { $item_goods_money = $goods_item[ 'goods_money' ]; $item_real_goods_money = $goods_item[ 'real_goods_money' ]; } $goods_money += $item_goods_money; $real_goods_money += $item_real_goods_money; $goods_item[ 'real_goods_money' ] = $item_real_goods_money; $goods_list[ $k ] = $goods_item; } $data[ 'goods_list' ] = $goods_list; $data[ 'goods_money' ] = $goods_money; $data[ 'real_goods_money' ] = $real_goods_money; return $data; } /** * 商品卡项抵扣(抵扣会将商品单价视为0) * @param $goods_item * @param $card_item */ public function itemCardCalculate($goods_item, $data) { $card_item_id = $goods_item[ 'card_item_id' ] ?? 0; $member_id = $data[ 'member_id' ]; $sku_id = $goods_item[ 'sku_id' ]; if ($card_item_id > 0) { $num = $goods_item[ 'num' ]; $member_oncecard_model = new MemberOnceCard(); $card_item_params = array ( 'member_id' => $member_id, 'sku_id' => $sku_id, 'item_id' => $card_item_id ); $item_card_result = $member_oncecard_model->getUseCardNum($card_item_params); if ($item_card_result[ 'code' ] < 0) { return []; } $item_card_data = $item_card_result[ 'data' ]; $card_item_info = $item_card_data[ 'card_item_info' ]; $card_info = $item_card_data[ 'card_info' ]; $goods_item[ 'card_item_info' ] = $card_item_info; $goods_item[ 'card_info' ] = $card_info; $card_num = $item_card_data[ 'card_num' ]; $goods_item[ 'card_num' ] = $card_num; if ($card_num > 0) { if ($num > $card_num) { $num = $card_num; } } $goods_item[ 'num' ] = $num; $price = 0; $goods_money = $price * $num; $goods_item[ 'price' ] = $price; $goods_item[ 'goods_money' ] = $goods_money; $goods_item[ 'real_goods_money' ] = $goods_money; } return $goods_item; } /** * 获取立即购买商品信息 * @param $data * @return array */ public function getShopGoodsList($data) { $store_id = $data[ 'store_id' ]; $sku_array = $data[ 'product_array' ]; // $sku_array = $data[ 'sku_array' ]; $sku_ids = array_column($sku_array, 'sku_id'); $sku_num_array = array_column($sku_array, 'num', 'sku_id'); $sku_data = array_column($sku_array, null, 'sku_id'); $data[ 'sku_data' ] = $sku_data; // $sku_ids = $data['sku_ids'];//sku_id数组weight $site_id = $data[ 'site_id' ]; $field = 'gs.site_id,gs.goods_id,gs.sku_id,gs.goods_name,gs.sku_name,gs.spec_name,gs.introduction,g.goods_image,gsd.stock,gs.price,gs.discount_price,gs.line_price, g.is_dec_stock,g.one_fenxiao_switch,g.one_fenxiao_way,g.one_fenxiao_commission,g.one_fenxiao_remark,g.two_fenxiao_switch,g.two_fenxiao_way,g.two_fenxiao_commission, g.two_fenxiao_remark,g.promotion_type,g.fenxiao_bind,g.fenxiao_qualification,g.fenxiao_withdraw_step, g.is_virtual,g.support_trade_type,g.action_type,g.action_link,g.delivery_type,g.delivery_unity_price,g.delivery_template_data,g.delivery_template_id, g.delivery_calc_type,g.virtual_verify_id, g.refund_mode,g.min_buy,g.max_buy,gs.weight,gs.volume,g.promotion_id,g.manjian_id, gs.is_consume_discount,gs.member_price,gs.discount_config,gs.discount_method,gs.card_discount_method, g.goods_type,g.is_need_yuyue,g.yuyue_need_pay,g.service_length,osgs.stock,osgs.sale_stock,(gsd.sale_num + gsd.virtual_sale) as sale_num'; $alias = 'gs'; $join = [ [ 'goods g', 'g.goods_id = gs.goods_id', 'inner' ], [ 'goods_sku_data gsd', 'gsd.sku_id = gs.sku_id', 'inner' ], [ 'store_store_goods_sku_data osgs', 'osgs.sku_id = gs.sku_id and (osgs.store_id is null or osgs.store_id = ' . $store_id . ')', 'left' ] ]; $goods_condition = [ [ 'gs.is_delete', '=', 0 ], // [ 'gs.goods_state', '=', 1 ], [ 'gs.sku_id', 'in', $sku_ids ], [ 'gs.site_id', '=', $site_id ] ]; $temp_goods_list = model('goods_sku')->getList($goods_condition, $field, '', $alias, $join); if (empty($temp_goods_list)) { return $this->error([], '不存在的商品!'); } $column_goods_list = array_column($temp_goods_list, null, 'sku_id'); $order_name = ''; $goods_num = 0; $goods_list = []; //分配关联商品数据 foreach ($sku_array as $k => $v) { $sku_id = $v[ 'sku_id' ]; $goods_info = $column_goods_list[ $sku_id ]; $order_name = string_split($order_name, ',', $goods_info[ 'goods_name' ]); $item_num = $v[ 'num' ] ?? 1; $goods_info[ 'card_item_id' ] = $v[ 'card_item_id' ] ?? 0; $goods_num += $item_num; // $item_stock = $v['sale_stock'] ?? 0; // $goods_info['stock'] = $item_stock; $is_virtual = $is_virtual ?? $goods_info[ 'is_virtual' ]; $action_type = $goods_info[ 'action_type' ]; $goods_info[ 'trade_type' ] = $action_type;//业务类型 $goods_info[ 'num' ] = $item_num; $goods_list[ $k ] = $goods_info; } $data[ 'goods_list' ] = $goods_list; $data[ 'order_name' ] = $order_name; $data[ 'goods_num' ] = $goods_num; return $this->success($data); } public function memberPrice($goods_item, $calculate_data) { $member_level_info = $calculate_data[ 'member_level_info' ] ?? []; $promotion_type = $goods_item[ 'promotion_type' ] ?? ''; $source = $calculate_data[ 'source' ] ?? ''; //这里要判断如果准备享受活动的话这里就不要计算会员价了(不打算参与活动的话需要传递source) if ($promotion_type != 'discount') { // if (!empty($source)) { $goods_model = new Goods(); $goods_member_price_result = $goods_model->memberPriceCalculate($goods_item, $member_level_info); return $goods_member_price_result; // } } return $this->error(); } }