| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- <?php
- namespace addons\CloudStock\common\logic\deduction;
- use addons\CloudStock\common\events\order\CloudStockChangeEvent;
- use addons\CloudStock\common\logic\gift_bag\GiftBagLogic;
- use addons\CloudStock\common\models\CloudStockAgent;
- use addons\CloudStock\common\models\CloudStockBuyingOrder;
- use addons\CloudStock\common\models\CloudStockFillOrder;
- use addons\CloudStock\common\models\CloudStockGoodsStockLog;
- use addons\CloudStock\common\models\CloudStockPushDelayLog;
- use common\enums\RabbitMqEnum;
- use common\enums\RedisKeyEnum;
- use common\enums\StatusEnum;
- use common\helpers\LockHelper;
- use common\models\order\Order;
- use common\models\user\User;
- class DeductionJob
- {
- public function handleSync($data)
- {
- \Yii::$app->services->rabbitMq->push(RabbitMqEnum::EXCHANGE_ORDER, RabbitMqEnum::ORDER_QUEUE, $data, self::class, 'handleQueue');
- }
- public function handleQueue($data){
- var_dump('执行限时补货补货');
- $lock_key = RedisKeyEnum::suffix(RedisKeyEnum::LOCK_CLOUD_STOCK_DELAY, $data['mall_id'] . ':' . $data['agent_user_id'] . ':' . $data['goods_id']);
- $identification = uniqid();
- try {
- if(!isset($data['is_lock'])||!empty($data['is_lock'])){
- if (!LockHelper::lock($lock_key, $identification, 5, 10)) {
- var_dump('加锁失败');
- return true;
- }
- }
- $model = CloudStockPushDelayLog::findOne([
- 'mall_id' => $data['mall_id'],
- 'stock_log_id' => $data['stock_log_id'],
- 'agent_user_id' => $data['agent_user_id'],
- 'status'=>StatusEnum::ENABLED
- ]);
- if (empty($model)) return true;
- // 根据需求。如果当前订单已经申请售后,并且订单已经售后完成,则不在进行补货
- if ($data['order_type'] == 'buying') {
- $order = CloudStockBuyingOrder::findOne(['id' => $data['order_id']]);
- $mainOrder = Order::findOne(['id' => $order['order_id']]);
- if (!empty($mainOrder) && $mainOrder['is_feedback'] == 2) return true;
- }
- $user_parent_agent = CloudStockAgent::findOne(['user_id' => $data['agent_user_id'], 'mall_id' => $data['mall_id'], 'status' => StatusEnum::ENABLED]);
- $order_no = '';
- $store_id = 0;
- switch ($data['order_type']) {
- case 'buying':
- $order = CloudStockBuyingOrder::findOne(['id' => $data['order_id']]);
- $class = BuyDeductionLogic::class;
- $main_order = Order::findOne(['id' => $order['order_id']]);
- $order_no = $main_order['order_no'];
- $store_id = $main_order['store_id'];
- break;
- case 'fill':
- $order = CloudStockFillOrder::findOne(['id' => $data['order_id']]);
- $class = FillDeductionLogic::class;
- $order_no = $order['order_no'];
- break;
- default:
- }
- if (!empty($class) && !empty($order)) {
- $user = User::findOne(['id' => $data['user_id']]);
- $stock_log = CloudStockGoodsStockLog::findOne(['id' => $data['stock_log_id']]);
- $not_yet_num = $model['not_yet_num'];
- if ($not_yet_num > 0) {
- $deduction_logic = new $class($user, $user_parent_agent, $stock_log, $order, $not_yet_num, $data['time_limit_fill_user_ids'], 1);
- $deduction_logic->order_type = $data['order_type'];
- $deduction_logic->order_no = $order_no;
- $deduction_logic->store_id = $store_id;
- $deduction_logic->deduct();
- $model->not_yet_num-=$not_yet_num;
- if($model->not_yet_num<=0) $model->not_yet_num = 0;
- if (!empty($obj->event_arr)) {
- foreach ($obj->event_arr as $event_data) {
- $event = new CloudStockChangeEvent($event_data['mall_id']);
- \Yii::$app->services->events->dispatch($event, $event_data, $event->listeners);
- }
- }
- }
- }
- $model->status = StatusEnum::DELETE;
- $model->save();
- LockHelper::uLock($lock_key, $identification);
- return true;
- } catch (\Exception $e) {
- var_dump($e->getMessage() . $e->getFile() . $e->getLine());
- LockHelper::uLock($lock_key, $identification);
- return true;
- }
- }
- public function handleTest($data)
- {
- var_dump('测试延时队列情况');
- var_dump($data);
- }
- public function delayDeductionStock($data)
- {
- try {
- $mall_id = $data['mall_id'];
- $order_id = $data['order_id'];
- $give_arr = $data['give_arr'];
- $payment_for_goods = $data['payment_for_goods'];
- $buy_user_id = $data['buy_user_id'];
- $level = $data['level'];
- $stock_log_arr = $data['stock_log_arr'];
- $sub_user_id = GiftBagLogic::checkDeductionStockNoDelay($mall_id, $buy_user_id, $level, $give_arr);
- GiftBagLogic::deductionStock($mall_id, $sub_user_id, $order_id, $give_arr, $payment_for_goods, $stock_log_arr);
- } catch (\Exception $e) {
- var_dump('delayDeductionStock:' . $e->getMessage() . $e->getFile() . $e->getLine());
- }
- }
- public function test()
- {
- var_dump('测试延时队列执行情况' . date('Y-m-d H:i:s', time()));
- }
- }
|