db->beginTransaction(); try { $user_id = $order_detail->user_id; $mall_id = $order_detail->mall_id; //创建会员买货订单 $params = [ 'mall_id' => $mall_id, 'user_id' => $user_id, 'after_distribution_price' => $this->getAfterPrice($order_detail,$commission), 'order_id' => $order_detail['order_id'], 'order_detail_id' => $order_detail['id'], 'goods_id' => $order_detail['goods_id'], 'num' => $order_detail['num'], 'reward_unit_price' => $reward_unit_price, ]; $buying_order = CloudStockTwoBuyingOrder::setData($params); if ($buying_order == false) throw new \Exception(CloudStockTwoBuyingOrder::getStaticError()); //库存变化记录 $params = [ 'mall_id' => $mall_id, 'goods_id' => $order_detail['goods_id'], 'user_id' => $order_detail['user_id'], 'changes_dir' => CloudStockTwoEnum::STOCK_CHANGE_SUB, 'order_id' => $buying_order['id'], 'num' => $order_detail['num'], 'order_type' => CloudStockTwoEnum::STOCK_ORDER_TYPE_USER, 'changes_type' => CloudStockTwoEnum::STOCK_CHANGE_TYPE200, ]; $stock_log = CloudStockTwoGoodsStockLog::setData($mall_id,$params); if (!$stock_log) throw new \Exception(CloudStockTwoGoodsStockLog::getStaticError()); $user = User::findOne(['id' => $user_id]); $agent = CloudStockTwoAgent::findOne(['mall_id' => $mall_id, 'user_id' => $user_id, 'status' => StatusEnum::ENABLED]); if (empty($user)) throw new \Exception(CloudStockTwoAgent::getStaticError()); //组装奖励数据 $basic_conf = \Yii::$app->services->setting->addons->get($mall_id, AddonsEnum::ADDONS_NAME_CLOUD_STOCK_TWO, 'agent'); $parent_agent_list = CloudStockTwoAgent::getUserParentAgentList($user_id,true); $reward_list = []; $wait_deduct_equal_money = 0; if (!empty($basic_conf['is_enable'])){ $rewardObj = new AgentReward($mall_id,$user_id,$parent_agent_list,$stock_log,$basic_conf); $reward_list = $rewardObj->sendReward(); $wait_deduct_equal_money = $rewardObj->wait_deduct_equal_money; } $user_parent_agent = CloudStockTwoAgent::getUserParentAgent($user_id, $agent['level'] ?? 0); //库存递归扣减逻辑 $obj = new BuyDeductionLogic($user, $user_parent_agent, $stock_log, $buying_order, $buying_order->num,$reward_list,$parent_agent_list,$wait_deduct_equal_money,'buying'); $obj->order_type = 'buying'; if (!$obj->deduct()) throw new \Exception('库存递归扣减逻辑异常'); $buying_order->reward_list = json_encode($reward_list); $buying_order->save(); $t->commit(); return true; } catch (\Exception $e) { $t->rollBack(); $exception = FormatHelper::exception($e, $e->getMessage()); echo $exception; \Yii::error($exception); } } protected function getAfterPrice($order_detail,$commission){ $is_deduction_commission = \Yii::$app->services->setting->addons->get($order_detail['mall_id'], AddonsEnum::ADDONS_NAME_CLOUD_STOCK_TWO, 'basic.is_deduction_commission'); $res = $order_detail['goods_price']; if(!empty($is_deduction_commission))$res = $order_detail['goods_price']-$commission; if($res<0) return 0; return $res; } }