| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264 |
- <?php
- namespace addons\CloudStock\common\logic\order;
- use addons\CloudStock\common\enums\CloudStockEnum;
- use addons\CloudStock\common\logic\gift_bag\GiftBagLogic;
- use addons\CloudStock\common\models\CloudStockAgent;
- use addons\CloudStock\common\models\CloudStockAgentGoods;
- use addons\CloudStock\common\models\CloudStockDeductionDetail;
- use addons\CloudStock\common\sms\SmsConfig;
- use addons\CloudStock\common\sms\TimeLimitFillMessage;
- use addons\DoubleCopy\common\models\DoubleCopyLevel;
- use common\enums\AddonsEnum;
- use common\enums\StatusEnum;
- use common\helpers\sms\Sms;
- use common\models\mall\MallAddons;
- use common\models\order\Order;
- use common\models\order\OrderDetail;
- use common\models\user\User;
- use Overtrue\EasySms\EasySms;
- use Overtrue\EasySms\Exceptions\NoGatewayAvailableException;
- class DoubleCopyOrderLogic
- {
- public function handle($data)
- {
- $order_id = $data['order_id'] ?? 0;
- $commission_arr = $data['commission_arr'] ?? [];
- $order = Order::findOne(['id' => $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);
- }
- }
- }
- }
- }
|