is_scan) { $order = \app\plugins\scanCodePay\models\Order::findOne(['id' => $this->order_id, 'is_delete' => 0, 'is_pay' => 1]); if (!$order) { return; } } else { $order = Order::findOne(['id' => $this->order_id, 'is_delete' => 0, 'is_pay' => 1, 'trade_status' => Order::ORDER_FLOW_CONFIRM]); if (!$order) { return; } $field_order_id = VideoShopOrderExt::find()->where(['order_id' => $this->order_id])->select('order_id')->column(); if ($field_order_id) { $needOrderComplete = 1; //不处理视频号小店订单 // return; } } if ($needOrderComplete) { try { $ShareMoneyForm = new \app\modules\client\models\v1\ShareMoneyForm(); $ShareMoneyForm->store_id = $order->store_id; $ShareMoneyForm->order = $order; $ShareMoneyForm->setData(); $form = new \app\modules\client\models\OrderComplete(); $form->order_id = $order->id; $form->order_type = 0; $form->store_id = $order->store_id; $form->notify(); } catch (\Exception $e) { \Yii::error($e); debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']], __CLASS__); } } if (OrderUtil::isCancel($order)) { // 已取消,不处理 return; } if (OrderUtil::isAfterSale($order)) { // 已售后,不处理 return; } if (!$this->is_scan) { $orderRefund = OrderRefund::findOne(['order_id' => $this->order_id, 'is_delete' => 0, 'is_user_cancel' => 0]); if ($orderRefund && !\in_array($orderRefund->status, [2, 3])) { // 如果售后类型不是换货或拒绝退换货,不处理 return; } try { $form = new NewMerchantForm(); $type = 1; $form->store_id = $order->store_id; $result = $form->saasGiveIntegral($order->pay_price, $order->user_id, $order->order_no, $type); debug_log($result, 'orderComplete.log'); } catch (\Exception $e) { debug_log($e->getMessage(), 'orderComplete.log'); } } try { if($order->transaction_id){ //检测微信是否收货 Wechat::init($this->store_id); $app = WechatMini::getWechatConfig($this->store_id); $form = new WechatThirdForm(['store_id' => $this->store_id]); $is_trade_managed = $form->is_trade_managed($app); $open = true; if($is_trade_managed){ // \Yii::error(['--------$is_trade_managed=false---- ', $store_id]); $result = $form->wxOrderStateIsConfirm($app, $order); debug_log('检测是否收货', 'yunst.log'); debug_log($result, 'yunst.log'); if(!$result){ $open = false; } } if($open){ //如果没有添加成功分账接收人就完结分账 $share_receiver = SharingReceiver::findOne(['store_id' => $this->store_id, 'order_no' => $order['order_no']]); if (!$share_receiver) { $res = WechatShare::complete($order['transaction_id'], $order['id'], false, '分账完结', $this->store_id, $order['is_platform'] ); debug_log('分账完结_', 'yunst.log'); debug_log($res, 'yunst.log'); } } } } catch (\Exception $e) { debug_log($e->getMessage(), 'yunst.log'); } $orderUtil = new OrderUtil(); try { $order_id_arr = $orderUtil->profitSharing($order, $this->store_id); } catch (\Exception $e) { \Yii::warning('---- profitSharing END分账失败 ----' . $e->getMessage()); } $this->retry--; if(!empty($order_id_arr) && $this->retry){ //延时重试 \queue_push(new NoAfterSalesOrderJob(['order_id' => $this->order_id, 'store_id' => $this->store_id, 'retry' => $this->retry, 'is_scan' => $this->is_scan ?? 0]), 86400); return; } if (!$this->is_scan) { //如果转单等供货商售后期过再执行逻辑 否则加延时重试 $orderTransit = OrderTransit::findOne(['order_id' => $order->id, 'is_sale' => 0, 'is_delete' => 0]); if ($orderTransit) { $supplier = Supplier::findOne(['cloud_supplier_id' => $orderTransit->cloud_supplier_id, 'is_delete' => 0]); if ($supplier) { $confirm_time = $orderTransit->confirm_time; $sale_time = bcadd($confirm_time, $supplier->sale_day * 86400); if ($confirm_time <= 0 || $sale_time > time()) { $sale_day = 86400; if ($confirm_time > 0) { $sale_day = bcsub($sale_time, time()); } \queue_push(new NoAfterSalesOrderJob(['order_id' => $this->order_id, 'store_id' => $this->store_id, 'retry' => $this->retry, 'is_scan' => $this->is_scan ?? 0]), $sale_day); return; } } } Order::updateAll(['is_sale' => 1, 'updated_at' => time()], ['id' => $order['id']]); try { //返回团长免单金额 PtActivityOrder::handleHeadOrder($order['pt_order_id']); } catch (\Exception $e) { debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']] ,'pt_handleHeadOrder.log'); } //处理超级卖货系统 try { $result = SuperSales::getNotFinishSales($order->user_id, $order->id, $order->store_id); debug_log(['order_no' => $order->order_no, 'result' => $result], 'superSales.log'); $result = \app\models\SuperSalesMoney::sendMoney($order); debug_log(['order_no' => $order->order_no, 'result' => $result], 'superSalesMoney.log'); } catch (\Exception $e) { debug_log(['order_no' => $order['order_no'], 'message' => $e->getMessage()], 'superSales.log'); } try { // 如果是复购订单,就释放冻结佣金 if ((int)$order['is_fugou'] === 1) { \app\utils\FuGou::sendFrostPrice($order['user_id']); } } catch (\Exception $e) { debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']] ,'guGou.log'); } try { \app\modules\admin\models\TeamBonusForm::afterOrderSales($order); } catch (\Exception $e) { debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']] ,'teamBonusPool.log'); } try { BonusPool::sendRange($order['id']); // 奖金池补充奖金 BonusPool::poolPush($order); BonusPool::generalUserConsume($order['user_id'], $order['store_id']); BonusPool::sendTwoPlusOneTeamLevelShare($order['id']); BonusPool::sendArea($order['id']); if(!$order['share_hold_pay_up']){ BonusPool::userAuto2ShareHolder($order); BonusPool::userSelfBuyGoods2ShareHolder($order); } //处理滑落 单独拿出来 放sendRange里面会操作失败 因为处理滑落会先查询下级是否是股东 但是成为股东逻辑还没执行到 BonusPool::userSlide($order); } catch (\Exception $e) { debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']] ,'share_holder_bonus.log'); } try { \app\modules\admin\models\ActivityOrderRebateSelfForm::afterOrderSales($order); \app\models\ActivityRebateOrderNLog::priceInfoOrderId($order); } catch (\Exception $e) { debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']] ,'activityOrder.log'); } try { TeamGradesPoolDetail::setPoolDetail($order); } catch (\Exception $e) { debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']] ,'teamGradesPoolDetail.log'); } try { // 免单队列 $orderUtil->orderQueueSeceiver($order); } catch (\Exception $e) { debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']] ,'orderQueue.log'); } try { $orderUtil->share_money($order); } catch (\Exception $e) { debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']] ,'share_money.log'); } try { $orderUtil->video_shop_order_share_money($order['id']); } catch (\Exception $e) { debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']] ,'video_shop_order_share_money.log'); } try { $orderUtil->share_holder_money($order); } catch (\Exception $e) { debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']] ,'share_holder_money.log'); } try { $store_integral_time = Option::get(OptionSetting::STORE_INTEGRAL_TIME, $order['store_id'], 'gift', 0)['value']; if ($store_integral_time == 2 || !$store_integral_time){ $orderUtil->give_integral($order); } } catch (\Exception $e) { debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']] ,'give_integral.log'); } // 消费获赠成长值 try { $orderUtil->sendGrowthValue($order); } catch (\Exception $e) { debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']] ,'send_growth_value.log'); } try { $orderUtil->shop_share($order['id']); } catch (\Exception $e) { debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']] ,'shop_share.log'); } try { $orderUtil->league_price($order); } catch (\Exception $e) { debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']] ,'league_price.log'); } // 门店收益 if ($order['md_id'] > 0) { try { $orderUtil->handleMdProfit($order['id']); } catch (\Exception $e) { debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']] ,'handleMdProfit.log'); } } try { $orderUtil->sendVideoGoodsProfit($order['id']); } catch (\Exception $e) { debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']] ,'sendVideoGoodsProfit.log'); } try { //代理发放佣金 $orderUtil->agencyPrice($order); } catch (\Exception $e) { debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']] ,'agencyPrice.log'); } //代理发放佣金(二级佣金) $orderUtil->agencyPriceTwo($order); try { //产品代理发放佣金 $orderUtil->sendGoodsAgentMoney($order); } catch (\Exception $e) { debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']] ,'sendGoodsAgentMoney.log'); } try { //给上级发放大转盘抽奖次数 (new PondUserNum())->sendNum($order['user_id']); } catch (\Exception $e) { debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']] ,'pondSendNum.log'); } try { // 处理供应链平台商户号收款店铺结算 $store_info = Store::findOne($order->store_id); if ($order->is_use_platform_mch == 1) { $profit = bcmul($order->pay_price, ($store_info->transfer_profit / 100), 3); $price = bcsub($order->pay_price, $profit, 3); //判断是否转单, $order_transit = OrderTransit::find()->where(['order_id' => $order->id, 'is_delete' => 0, 'is_use_platform_mch' => 1]) ->select('order_price')->sum('order_price') ?: 0; if ($order_transit > 0) { $price = bcsub($price, $order_transit, 3); } Store::addMoney($store_info, $price, '用户下单', $order->id, $order->user_id); } } catch (\Exception $e) { // Todo debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']] ,'store_order_transit.log'); } try { //服务人员分佣 $workerProfitSend = \app\modules\admin\models\worker\WorkerForm::workerProfitSend($order['id']); debug_log(['服务人员分佣', $order['id'], $workerProfitSend], 'worker_order_sales.log'); } catch (\Exception $e) { debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']], 'worker_order_sales.log'); } try { //入驻商分佣 $mchAccountMoney = \app\modules\admin\models\MchForm::accountMoneyAdd($order); debug_log(['入驻商分佣', $order['id'], $mchAccountMoney], 'mch_account_add.log'); } catch (\Exception $e) { debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']], 'mch_account_add.log'); } try { //达人 $PublicRanking = \app\modules\admin\models\publicRanking\PublicRankingForm::afterOrderSave($order); debug_log(['达人', $order['id'], $PublicRanking], 'PublicRankingForm.log'); } catch (\Exception $e) { debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']], 'PublicRankingForm.log'); } try { $orderUtil->workerLevel($order); } catch (\Exception $e) { debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']], 'workerLevel.log'); } try { $orderUtil->level($order); } catch (\Exception $e) { debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']], 'userLevel.log'); } try { $result = ShareGroupMoney::sendMoney($order); if ($result['code']) { debug_log(['result' => $result, 'order_id' => $order['id']], 'share_group_money.log'); } } catch (\Exception $e) { debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']], 'share_group_money.log'); } // 在这里执行发放核销卡逻辑 try { $store_card_time = Option::get(OptionSetting::STORE_CARD_TIME, $order['store_id'], 'gift', 0)['value']; if ($store_card_time == 2 || !$store_card_time){ $this->sendVerifyCard($order['id'],$order['user_id'],$order['order_type']); } }catch (\Exception $e){ debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']], 'sendVerifyCardErr.log'); } // 在这里执行发放优惠券逻辑 try { $store_coupon_time = Option::get(OptionSetting::STORE_COUPON_TIME, $order['store_id'], 'gift', 0)['value']; if ($store_coupon_time == 2 || !$store_coupon_time){ $this->sendCouponCard($order['id'],$order['user_id']); } }catch (\Exception $e){ debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']], 'sendCouponErr.log'); } // 下单自动发放优惠券修改到这里 AutoSendCoupon::send($order['user_id'], CouponAutoSend::EVENT_ORDER, $this->store_id); try { $result = IntegralAppreciationPoolSub::setPool($order['id'], $order['store_id']); } catch (\Exception $e) { debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']], 'integralAppreciation.log'); } try { $result = StoreDividendsCycle::setDividendsCycle($order); debug_log(['result' => $result], 'storeDividendsCycle.log'); } catch (\Exception $e) { debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']], 'storeDividendsCycle.log'); } } else { \app\plugins\scanCodePay\models\Order::updateAll(['is_sale' => 1, 'updated_at' => time()], ['id' => $order['id']]); try { //入驻商分佣 $mchAccountMoney = \app\modules\admin\models\MchForm::accountMoneyAdd($order); debug_log(['入驻商分佣', $order['id'], $mchAccountMoney], 'mch_account_add.log'); } catch (\Exception $e) { debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']], 'mch_account_add.log'); } try { $result = StoreDividendsCycle::setDividendsCycle($order); debug_log(['result' => $result], 'storeDividendsCycle.log'); } catch (\Exception $e) { debug_log(['msg' => $e->getMessage(), 'order_id' => $order['id']], 'storeDividendsCycle.log'); } } } private function sendVerifyCard($order_id, $user_id, $order_type) { try { if ($order_type != 4) { $goods_id = OrderDetail::find()->select('goods_id, num')->where(['order_id' => $order_id, 'is_delete' => 0])->asArray()->all(); foreach ($goods_id as $k => $v) { $verify_card_info = Goods::find()->select('id, verify_card_id, send_verify_card_num, product_type') ->where(['id' => $v['goods_id'], 'is_delete' => 0])->asArray()->one(); if (empty($verify_card_info)) { continue; } $num = intval($verify_card_info['send_verify_card_num'] ?? 0) * intval($v['num']); if (in_array($verify_card_info['product_type'], [4])) { $num = 1; } $this->startSendVerifyCard($verify_card_info['verify_card_id'], $verify_card_info['id'], $user_id, $order_type, $order_id, $num); } } } catch (\Exception $e) { debug_log(['message' => $e->getMessage(), 'line' => $e->getLine(), 'file' => $e->getFile()], 'order_complete.log'); } } private function startSendVerifyCard($verify_card_id, $goods_id, $user_id, $order_type, $order_id, $num){ if (!empty($verify_card_id)){ $order = Order::findOne($order_id); $used_verify_card_id = ''; if($order->verify_card_id){ $used_verify_sale_id = $order->verify_card_id; $verify_sale = VerifyCardSale::findOne($used_verify_sale_id); $used_verify_card_id = $verify_sale['verify_card_id']; } $verify_card_id_arr = explode(',', $verify_card_id); $res = Tools::getVerifyList($verify_card_id_arr); \Yii::error($res); $ids = ''; foreach($res as $value){ if($value['id'] == $used_verify_card_id){ \Yii::error('================== 卡券发放结果:订单消费的卡券不再赠送,卡券id为:' . $value['id']); continue; } for ($i = 0; $i < $num; $i++) { $verify_form = new VerifyCardSale(); $verify_form->store_id = $order->store_id; $verify_form->user_id = $user_id; $verify_form->verify_card_id = $value['id']; //查询核销卡使用总次数 $left_info = VerifyCard::find()->select('total_num, expire_day')->where([ 'id' => $value['id'], 'is_delete' => 0 ])->asArray()->one(); if ($value['type'] == 1) { $verify_form->left_num = $left_info['total_num']; } else { $verify_form->left_num = 1; } $account = VerifyCardAccount::find()->where(['store_id' => $value['store_id'], 'card_id' => $value['id'], 'status' => 0])->limit(1)->one(); if (!$account) { \Yii::error('================== 卡券发放结果:未找到数据,卡券id为:' . $value['id']); continue; } $verify_form->account_id = $account->id; $verify_form->sale_time = time(); if ($value['date_type'] == 1) { $verify_form->end_time = time() + $left_info['expire_day'] * (3600*24); } else { $verify_form->end_time = $value['end_time']; } $verify_form->goods_id = $goods_id; $verify_form->order_type = $order_type; if ($verify_form->save()) { $ids .= $verify_form->id . ','; if ($value['type'] == 1) { //核销卡核销数量增加 $verify_card_form = VerifyCard::findOne([ 'id' => $value['id'], 'is_delete' => 0 ]); $verify_card_form->use_num += 1; if (!$verify_card_form->save()) { continue; } } else { $card = VerifyCard::findOne(['id' => $value['id'], 'is_delete' => 0]); $account = VerifyCardAccount::findOne($verify_form->account_id); $card->send_times += 1; $card->save(); } $account->status = 1; if (!$account->save()) { continue; } } else { \Yii::warning($verify_form->errors); } } } $order->get_verify_id = $ids; $order->save(); } } private function sendCouponCard($order_id, $user_id) { $goods_id = OrderDetail::find()->select('goods_id, num')->where(['order_id' => $order_id,'is_delete' => 0])->asArray()->all(); $coupon_arr = []; foreach ($goods_id as $k => $v) { $coupon_card_info = Goods::find()->select('id, coupon_card_id, send_coupon_card_num')->where(['id' => $v['goods_id'], 'is_delete' => 0])->asArray()->one(); if (empty($coupon_card_info)) { continue; } $coupon_card_id = $coupon_card_info['coupon_card_id']; $coupon_card_id_arr = explode(',', $coupon_card_id); $send_coupon_card_num = intval($coupon_card_info['send_coupon_card_num']); $coupon_list = Coupon::find()->where(['id' => $coupon_card_id_arr, 'is_delete' => 0])->select('total_count, id')->asArray()->all(); foreach ($coupon_list as $item) { for ($i = 0; $i < $send_coupon_card_num; $i++) { $coupon_send_count = UserCoupon::find()->where([ 'coupon_id' => $item['id'], 'type' => [ UserCoupon::TYPE_STORE, UserCoupon::TYPE_AUTO, UserCoupon::TYPE_GET ] ])->select('id')->count(); if (intval($item['total_count']) === -1 || $item['total_count'] > $coupon_send_count) { debug_log([ 'user_id' => $user_id, 'id' => $item['id'] ] ,'coupon.log'); $use_coupon = coupon::userAddCoupon($user_id, $item['id']); if ($use_coupon) { array_push($coupon_arr, intval($use_coupon)); } } } } } $order = Order::findOne($order_id); $order->get_coupon_id = implode(',', $coupon_arr); $order->save(); } }