order_id,'ptOrderLog.log'); $order_id = $this->order_id; $order = PtActivityOrder::findOne($order_id); $order_detail = PtActivityOrderDetail::find()->where(['order_id' => $order_id])->select('goods_id, activity_id')->asArray()->one(); if (!empty($order) && !empty($order_detail)) { $pt_activity_goods = PtActivityGoods::findOne([ 'activity_id' => $order_detail['activity_id'], 'goods_id' => $order_detail['goods_id'], 'is_delete' => 0 ]); if ($pt_activity_goods) { $pt_activity = PtActivity::findOne(['id' => $pt_activity_goods->activity_id, 'is_delete' => 0]); if ($pt_activity) { $pt_order = PtActivityOrder::find()->where(['trade_status' => 0, 'is_pay' => 1]) ->andWhere(['OR', ['id' => $this->order_id], ['pt_number' => $this->order_id]])->select('id')->column(); if($pt_activity->party_type == 1){ foreach ($pt_order as $oid) { $pt_winner_order = PtActivityOrder::findOne($oid); $pt_winner_order->is_pt_finish = 1; $pt_winner_order->is_winner = 1; if (!$pt_winner_order->save()) { throw new \Exception("保存失败"); } $result = $this->winnerHandle($oid, (int)$pt_activity->head_is_free); } } if ($pt_activity->party_type == 0 && $pt_activity->party_size <= count($pt_order)) { //获取成功人数 $winner_num = intval($pt_activity->party_winner_size) > 0 ? intval($pt_activity->party_winner_size) : intval($pt_activity->party_size); for ($num = 1; $num <= $winner_num; $num++) { $winner_order_index = array_rand($pt_order, 1); debug_log($pt_order,'ptOrderLog.log'); $pt_winner_order = PtActivityOrder::findOne($pt_order[$winner_order_index]); $pt_winner_order->is_pt_finish = 1; $pt_winner_order->is_winner = 1; if (!$pt_winner_order->save()) { throw new \Exception("保存失败"); } $result = $this->winnerHandle($pt_order[$winner_order_index], (int)$pt_activity->head_is_free); debug_log($result, 'ptOrderLog.log'); if ($result['code'] !== 0) { throw new \Exception($result['msg']); } unset($pt_order[$winner_order_index]); $pt_order = array_values($pt_order); } $result = $this->loserHandle($order_id, (int)$pt_activity->head_is_free); debug_log($result, 'ptOrderLog.log'); if ($result['code'] !== 0) { throw new \Exception($result['msg']); } } } } } } catch (\Exception $e) { debug_log('拼团处理:' . $e->getMessage() . $e->getLine() . $e->getFile(),'ptOrderLog.log'); } } //拼团成功 public function winnerHandle($order_id, $head_is_free = 0) { try { $ptOrder = PtActivityOrder::find()->where(['id' => $order_id])->asArray()->one(); $ptOrder['pt_order_id'] = $ptOrder['id']; unset($ptOrder['id']); $ptOrderDetail = PtActivityOrderDetail::find()->where(['order_id' => $order_id])->asArray()->one(); unset($ptOrderDetail['id']); $order = new Order(); $order->attributes = $ptOrder; $goodsInfo = json_decode($ptOrderDetail['goods_info'], true); $goodsInfo['mch_id'] && $order->mch_id = intval($goodsInfo['mch_id']); $order->first_price = 0.00; $order->second_price = 0.00; $order->third_price = 0.00; $order->transaction_id = $ptOrder['transaction_id']; $order->integral = json_encode(['forehead' => 0, 'forehead_integral' => 0]); // $order->order_no = OrderNo::getOrderNo(OrderNo::ORDER_MALL); $order->is_pay = 0; $order->version = cyy_version(); if (!$order->save()) { throw new \Exception(json_encode($order->errors)); } $orderDetail = new OrderDetail(); $orderDetail->attributes = $ptOrderDetail; $orderDetail->order_id = $order->id; if (!$orderDetail->save()) { throw new \Exception(json_encode($orderDetail->errors)); } $order->is_pay = 1; $deliveryInfo = \app\models\DeliveryInfo::find()->where(['order_no' => $order->order_no])->one(); if($deliveryInfo){ $order->is_delivery = 1; } if (!$order->save()) { throw new \Exception(json_encode($order->errors)); } $PtActivityGoods = PtActivityGoods::findOne( ['activity_id' => $ptOrderDetail['activity_id'], 'is_delete' => 0, 'goods_id' => $ptOrderDetail['goods_id'] ] ); $PtActivityGoods->sale_num += 1; if (!$PtActivityGoods->save()) { throw new \Exception(json_encode($order->errors)); } //团长免单不计算分佣了 if (intval($ptOrder['pt_number']) === 0 && $head_is_free) { $order->profit = 0; if (!$order->save()) { throw new \Exception(json_encode($order->errors)); } $ptActivityOrder = PtActivityOrder::findOne($ptOrder['pt_order_id']); $ptActivityOrder->is_head_free = 1; if (!$ptActivityOrder->save()) { throw new \Exception(json_encode($order->errors)); } // 支付完成后,相关操作 $store = Store::findOne($order->store_id); try { if ($store->business_model != 1) { $form = new \app\modules\alliance\models\AllianceOrderComplete(); } else { $form = new OrderComplete(); } $form->order_id = $order->id; $form->order_type = 0; $form->store_id = $order->store_id; $form->order = $order; $form->notify(); } catch(\Exception $e) { debug_log($e->getMessage() . $e->getFile() . $e->getLine(), 'ptOrderLog.log'); } return [ 'code' => 0, 'msg' => "处理成功" ]; } if (!intval($ptOrder['is_platform'])) { // 计算门店收益 if ($order->md_id > 0) { $result = OrderForm::findPrice($order->id); MdProfit::handleProfit($order->id, $result['original_price'], $result['md_price'], $order->md_id); }else{ if ($order->is_offline || in_array($order->order_type, [1, 2])) { MdProfit::handleProfit($order->id, $order->total_price, $order->total_price, $order->md_id); } } $this->setReturnData($order); // $form = new OrderComplete(); // $form->order_id = $order->id; // $form->order_type = 0; // $form->store_id = $order->store_id; // $form->notify(); } // 支付完成后,相关操作 $store = Store::findOne($order->store_id); try { if ($store->business_model != 1) { $form = new \app\modules\alliance\models\AllianceOrderComplete(); } else { $form = new OrderComplete(); } $form->order_id = $order->id; $form->order_type = 0; $form->store_id = $order->store_id; $form->notify(); } catch(\Exception $e) { debug_log($e->getMessage() . $e->getFile() . $e->getLine(), 'ptOrderLog.log'); } return [ 'code' => 0, 'msg' => "处理成功" ]; } catch (\Exception $e) { return [ 'code' => 1, 'msg' => $e->getMessage() ]; } } /** * 设置佣金 * @param Order $order * @return mixed */ public function setReturnData($order) { $form = new ShareMoneyForm(); $form->order = $order; $form->order_type = 0; $form->store_id = $order->store_id; return $form->setData(); } //拼团失败 public function loserHandle($order_id, $head_is_free) { try { $ptOrder = PtActivityOrder::findOne($order_id); $pt_number = $order_id; if ($ptOrder->pt_number) { $pt_number = $ptOrder->pt_number; } $pt_order = PtActivityOrder::find()->where(['trade_status' => 0, 'is_pay' => 1, 'is_winner' => 0]) ->andWhere(['OR', ['id' => $pt_number], ['pt_number' => $pt_number]])->select('id') ->column(); // TODO 这块注释掉 说是让所有拼团完成的订单过完售后期后才开始给团长退款 设置了团长免单后这里就不再进行退款了 // if ($head_is_free) { // //如果团长已成功,则开始免单 // if (!in_array($order_id, $pt_order)) { // array_push($pt_order, $pt_number); // } // } debug_log('pt_order=' . json_encode($pt_order),'ptOrderLog.log'); if ($pt_order) { foreach ($pt_order as $item) { $pt_loser_order = PtActivityOrder::findOne($item); $pt_loser_order->is_pt_finish = 1; if (!$pt_loser_order->save()) { throw new \Exception("保存失败"); } } $order_form = new PtActivityOrderForm(); $result = $order_form->loserHandle($pt_number); if ($result['code'] !== 0) { throw new \Exception($result['msg']); } } return [ 'code' => 0, 'msg' => "处理成功" ]; } catch (\Exception $e) { return [ 'code' => 1, 'msg' => $e->getMessage() ]; } } }