$order_id]); if (empty($order)) return true; $order_detail_list = OrderDetail::lists([ 'where' => [ ['order_id' => $order_id] ], ]); if (empty($order_detail_list)) return true; $mall_id = $order['mall_id']; $buy_user_id = $order['user_id']; if (!MallAddons::isInstall($mall_id, 'DoubleCopy')) { var_dump("order_id:{$order_id}:二二复制插件未安装"); return true; } $double_copy_level_model = DoubleCopyLevel::getOne([['mall_id' => $mall_id], ['level' => 1], ['status' => [StatusEnum::ENABLED]]], true); if (empty($double_copy_level_model)) { var_dump("order_id:{$order_id}:二二复制等级1未设置"); return true; } if (empty($double_copy_level_model['is_auto_upgrade'])) { var_dump("order_id:{$order_id}:二二复制是否启用自动升级未开启"); return true; } if (empty($double_copy_level_model['upgrade_type_goods'])) { var_dump("order_id:{$order_id}:二二复制购买商品升级未开启"); return true; } if (empty($double_copy_level_model['buy_goods_type'])) { var_dump("order_id:{$order_id}:二二复制购买商品升级必须是支付完成"); return true; } if (empty($double_copy_level_model['goods_type']) || $double_copy_level_model['goods_type'] != 2) { var_dump("order_id:{$order_id}:二二复制购买商品升级必须是指定商品"); return true; } $double_copy_level_model['goods_list'] = json_decode($double_copy_level_model['goods_list'], true); if (empty($double_copy_level_model['goods_list'])) { var_dump("order_id:{$order_id}:二二复制商品未设置"); return true; } $double_copy_goods_ids = array_column($double_copy_level_model['goods_list'], 'id'); $cloud_stock_double_copy_goods = \Yii::$app->services->setting->addons->get($mall_id, AddonsEnum::ADDONS_NAME_CLOUD_STOCK, 'double_copy_goods'); $cloud_stock_double_copy_goods_list = json_decode($cloud_stock_double_copy_goods['goods_list'], true); if (empty($cloud_stock_double_copy_goods_list)) return true; $cloud_stock_double_copy_goods_list = array_column($cloud_stock_double_copy_goods_list, null, 'id'); $configs = \Yii::$app->services->setting->addons->get($mall_id, AddonsEnum::ADDONS_NAME_CLOUD_STOCK, 'basic'); $deduction_commission_arr = []; if (!empty($configs['deduction_commission_arr'])) { $deduction_commission_arr = json_decode($configs['deduction_commission_arr'], true); } foreach ($order_detail_list as $detail) { if (!in_array($detail['goods_id'], $double_copy_goods_ids)) continue; if (!isset($cloud_stock_double_copy_goods_list[$detail['goods_id']])) continue; if (empty($cloud_stock_double_copy_goods_list[$detail['goods_id']]['num'])) continue; $cloud_stock_goods_id = $cloud_stock_double_copy_goods_list[$detail['goods_id']]['cloud_stock_goods_id']; $num = $cloud_stock_double_copy_goods_list[$detail['goods_id']]['num']; if(!empty($configs['buy_double_copy_goods_dec_cloud_stock_goods'])){ $num = $detail['num']; } $commission = 0; foreach ($deduction_commission_arr as $addons => $v) { if (!empty($v['is_open'])) { if (isset($commission_arr[$detail['id']][$addons])) { $commission += $commission_arr[$detail['id']][$addons]['commission']; } } } var_dump("扣除佣金{$commission},order_detail_id:" . $detail['id']); $goods_price = $detail['goods_price']; $payment_for_goods = $goods_price - $commission; $res = self::checkDeductionStock($mall_id, $order_id,$detail['id'], $buy_user_id, 0, $cloud_stock_goods_id, $num, $payment_for_goods); var_dump($res); if (!empty($res['is_sub_stock'])) { $give_arr = [$cloud_stock_goods_id => $num]; self::deductionStock($mall_id, $res['sub_user_id'] ?? 0, $order_id, $detail['id'], $give_arr, $payment_for_goods); } } } public static function checkDeductionStock($mall_id, $order_id, $order_detail_id, $buy_user_id, $level, $cloud_stock_goods_id, $num, $payment_for_goods) { $p_cloud_stock_agent_arr = GiftBagLogic::getParentCloudStockAgent($mall_id, $level, $buy_user_id); $is_sub_stock = 1; $sub_user_id = 0; if (!empty($p_cloud_stock_agent_arr)) { $configs = \Yii::$app->services->setting->addons->get($mall_id, AddonsEnum::ADDONS_NAME_CLOUD_STOCK, 'basic'); if (!empty($configs['is_time_limit_fill'])) { //开启延时补货 $first_parent = $p_cloud_stock_agent_arr[0]; $agent_goods_list = CloudStockAgentGoods::lists([ 'where' => [ ['mall_id' => $mall_id], ['user_id' => $first_parent['user_id']], ['goods_id' => $cloud_stock_goods_id], ], 'index' => 'goods_id', ]); $goods_ids = ''; $num_s = ''; if (!isset($agent_goods_list[$cloud_stock_goods_id]) || $agent_goods_list[$cloud_stock_goods_id]['num'] < $num) { //延时补货 $goods_ids = $cloud_stock_goods_id; $num_s = $num; $is_sub_stock = 0; $send_user_id = $first_parent['user_id']; } if ($is_sub_stock == 1) { $sub_user_id = $first_parent['user_id']; } if ($is_sub_stock == 0) { //投入延时队列 $post_data = [ 'mall_id' => $mall_id, 'order_id' => $order_id, 'order_detail_id' => $order_detail_id, 'give_arr' => [$cloud_stock_goods_id => $num], 'payment_for_goods' => $payment_for_goods, 'buy_user_id' => $buy_user_id, 'level' => $level ]; var_dump('DoubleCopyOrderLogic:checkDeductionStock投入延时队列数据:' . json_encode($post_data)); $fill_hour = $configs['fill_hour'] ?? 0; \Yii::$app->services->rabbitMq->delay($fill_hour * 3600, $post_data, self::class, 'delayDeductionStock'); if (!empty($send_user_id)) { //补货通知 try { $SmsConfig = new Sms($mall_id); $easy_sms = $SmsConfig->easySms; $message = new TimeLimitFillMessage($mall_id, $fill_hour, trim($goods_ids, ','), trim($num_s, ',')); $user = User::findOne(['id' => $send_user_id]); $easy_sms->send($user['mobile'], $message); } catch (NoGatewayAvailableException $e) { $res = $e->getExceptions(); if (!empty($res)) { foreach ($res as $exception) { if (is_string($exception->getMessage())) { var_dump('云库存购买二二复制商品补货通知短信发送失败:' . $exception->getMessage()); } } } } catch (\Exception $e) { var_dump('云库存购买二二复制商品补货通知短信发送失败:' . $e->getMessage()); } } } } else { $give_arr = [$cloud_stock_goods_id => $num]; $sub_user_id = GiftBagLogic::checkDeductionStockNoDelay($mall_id, $buy_user_id, $level, $give_arr); } } return ['is_sub_stock' => $is_sub_stock, 'sub_user_id' => $sub_user_id]; } public function delayDeductionStock($data) { try { $mall_id = $data['mall_id']; $order_id = $data['order_id']; $order_detail_id = $data['order_detail_id']; $give_arr = $data['give_arr']; $payment_for_goods = $data['payment_for_goods']; $buy_user_id = $data['buy_user_id']; $level = $data['level']; $sub_user_id = GiftBagLogic::checkDeductionStockNoDelay($mall_id, $buy_user_id, $level, $give_arr); self::deductionStock($mall_id, $sub_user_id, $order_id, $order_detail_id, $give_arr, $payment_for_goods); } catch (\Exception $e) { var_dump('DoubleCopyOrderLogic:delayDeductionStock:' . $e->getMessage() . $e->getFile() . $e->getLine()); } } public static function deductionStock($mall_id, $sub_user_id, $order_id, $order_detail_id, $give_arr, $payment_for_goods) { if (!empty($give_arr)) { if ($sub_user_id > 0) { foreach ($give_arr as $goods_id => $num) { if (empty($num)) continue; $params = [ 'mall_id' => $mall_id, 'user_id' => $sub_user_id, 'goods_id' => $goods_id, 'num' => $num, 'order_id' => $order_id, 'changes_type' => CloudStockEnum::STOCK_CHANGE_TYPE206, 'changes_dir' => CloudStockEnum::STOCK_CHANGE_SUB, 'order_type' => CloudStockEnum::STOCK_ORDER_TYPE_USER, ]; $res = CloudStockAgentGoods::subData($params); if (!$res) throw new \Exception(CloudStockAgentGoods::getStaticError()); var_dump('扣减库存成功'); } var_dump('货款' . $payment_for_goods); if ($payment_for_goods > 0) { $source_table = OrderDetail::tableName(); $source_table_id = $order_detail_id; $insert_wallet[] = [ 'mall_id' => $mall_id, 'user_id' => $sub_user_id, 'is_frozen' => false, 'wallet_type' => 'commission', 'money' => $payment_for_goods, 'desc' => '会员购买二二复制商品扣库存的货款', 'source_table' => $source_table, 'source_table_id' => $source_table_id, 'from_type' => AddonsEnum::ADDONS_NAME_CLOUD_STOCK, 'capital_type' => 'payment_for_double_copy_goods_buy', ]; if (!empty($insert_wallet)) CloudStockAgent::sendUserWalletQueue($insert_wallet); } } else { foreach ($give_arr as $goods_id => $num) { $params = [ 'stock_log_id' => 0, 'user_id' => 0, 'num' => $num, 'not_yet_num' => 0, 'changes_type' => CloudStockEnum::STOCK_CHANGE_TYPE206, 'order_id' => $order_id, 'goods_id' => $goods_id, 'mall_id' => $mall_id, ]; $res = CloudStockDeductionDetail::setData($params); } } } } }