| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- <?php
- namespace addons\CloudStockTwo\common\logic\order;
- use addons\CloudStockTwo\common\enums\CloudStockTwoEnum;
- use addons\CloudStockTwo\common\logic\deduction\BuyDeductionLogic;
- use addons\CloudStockTwo\common\models\CloudStockTwoAgent;
- use addons\CloudStockTwo\common\models\CloudStockTwoBuyingOrder;
- use addons\CloudStockTwo\common\models\CloudStockTwoGoodsStockLog;
- use common\enums\AddonsEnum;
- use common\enums\StatusEnum;
- use common\helpers\FormatHelper;
- use common\models\common\CapitalLog;
- use common\models\user\User;
- use common\models\user\UserPartitionRelationship;
- use addons\CloudStockTwo\common\logic\reward\AgentReward;
- class BuyOrderLogic
- {
- public function handle($order_detail,$commission = 0,$reward_unit_price = 0)
- {
- $t = \Yii::$app->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;
- }
- }
|