db->beginTransaction(); try { if (empty($fill_order)) throw new \Exception('补货单不存在'); if (empty($fill_order['is_pay'])) throw new \Exception('补货单未支付'); $order_id = $fill_order['id']; $mall_id = $fill_order['mall_id']; $goods_id = $fill_order['goods_id']; $num = $fill_order['num']; $user_id = $fill_order['user_id']; //库存变化记录 $params = [ 'mall_id' => $mall_id, 'goods_id' => $goods_id, 'user_id' => 0, 'changes_dir' => CloudStockTwoEnum::STOCK_CHANGE_SUB, 'order_id' => $order_id, 'num' => $num, 'order_type' => CloudStockTwoEnum::STOCK_ORDER_TYPE_REPLENISH, 'changes_type' => CloudStockTwoEnum::STOCK_CHANGE_TYPE202, ]; $stock_log = CloudStockTwoGoodsStockLog::setData($mall_id,$params); if (!$stock_log) throw new \Exception(CloudStockTwoGoodsStockLog::getStaticError()); $agent = CloudStockTwoAgent::findOne(['mall_id' => $mall_id, 'user_id' => $user_id, 'status' => StatusEnum::ENABLED]); $user = User::findOne(['id' => $user_id]); if (empty($user) || empty($agent)) throw new \Exception('代理商不存在'); //组装奖励数据 $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']); //库存递归扣减逻辑 $obj = new FillDeductionLogic($user, $user_parent_agent, $stock_log, $fill_order, $fill_order['num'],$reward_list,$parent_agent_list,$wait_deduct_equal_money,'fill'); $obj->order_type = 'fill'; if (!$obj->deduct()) throw new \Exception('库存递归扣减异常'); $fill_order->reward_list = json_encode($reward_list); $fill_order->save(); $params = [ 'mall_id' => $mall_id, 'user_id' => $user_id, 'goods_id' => $goods_id, 'num' => $num, 'order_id' => $fill_order['id'], 'changes_type' => CloudStockTwoEnum::STOCK_CHANGE_TYPE100, 'changes_dir' => CloudStockTwoEnum::STOCK_CHANGE_ADD, 'order_type' => CloudStockTwoEnum::STOCK_ORDER_TYPE_REPLENISH, ]; //生成代理商商品库存 $res = CloudStockTwoAgentGoods::addData($params); if (!$res) throw new \Exception(CloudStockTwoAgentGoods::getStaticError()); //补货奖励 // $level = CloudStockTwoLevel::findOne(['mall_id' => $mall_id, 'level' => $agent->level, 'status' => StatusEnum::ENABLED]); // if (!empty($level['is_fill'])) { // //补货奖发放 // $stock_goods = CloudStockTwoGoods::findOne(['mall_id' => $mall_id, 'goods_id' => $goods_id]); // $fill_reward_logic = new FillRewardLogic($agent, $stock_goods, 0, $order_id, $num, 0, // CloudStockTwoEnum::CHANGE_TYPE_INCREASE_FILL_EXTRA_BONUS, // '补货奖发放', // 0 // ); // $fill_reward_logic->addRewardLog(); // } //同步分销奖励 self::distributionReward($user_id, $mall_id, $fill_order); $t->commit(); return true; } catch (\Exception $e) { $t->rollBack(); $exception = FormatHelper::exception($e, $e->getMessage()); //echo $exception; \Yii::error($exception); return false; } } /** * @desc:同步分销奖励 * @Author: hua * @Date: 2022/3/3 * @Time: 12:03 * @Copyright: copyright (c) 2021 广东七件事集团 * @param $user_id * @param $mall_id * @param $fill_order * @return bool|void */ public static function distributionReward($user_id, $mall_id, $fill_order) { $configs = \Yii::$app->services->setting->addons->get($mall_id, AddonsEnum::ADDONS_NAME_CLOUD_STOCK_TWO, 'basic'); if (empty($configs['is_sync_distribution_level'])) return true; if (MallAddons::isInstall($mall_id, DistributionEnum::ADDONS_NAME) == 0) return true; $setting = \Yii::$app->services->setting->addons->get($mall_id, DistributionEnum::ADDONS_NAME, 'basic'); if (empty($setting['level'])) return; $distribution_list = Distribution::getDistributionList($setting['is_self_buy'], $mall_id, $user_id); $goods = Goods::findOne(['id' => $fill_order['goods_id']]); $order_detail = [ 'id' => $fill_order['id'], 'goods_id' => $fill_order['goods_id'], 'order_id' => $fill_order['id'], 'order_no' => $fill_order['order_no'], 'goods_name' => $goods['goods_name']??"", 'num' => $fill_order['num'], 'goods_price' =>$fill_order['pay_money'], 'original_goods_price' => bcmul($goods['price'],$fill_order['num'],2), 'cost_price' => $goods['cost_price'] * $fill_order['num'], ]; $setting['compute_type'] = ComputingEnum::ORDER_PAY; $agent_reward_obj = new DistributionReward($mall_id, $user_id, $setting, $distribution_list, $order_detail); $agent_reward_obj->addFrozenCommission(); } //业绩奖励 public function performanceReward(){} }