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); } } 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]); 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) { 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; $order->first_price = 0.00; $order->second_price = 0.00; $order->third_price = 0.00; $order->integral = json_encode(['forehead' => 0, 'forehead_integral' => 0]); // $order->order_no = OrderNo::getOrderNo(OrderNo::ORDER_MALL); 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)); } $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)); } return [ 'code' => 0, 'msg' => "处理成功" ]; } catch (\Exception $e) { return [ 'code' => 1, 'msg' => $e->getMessage() ]; } } //拼团失败 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(); 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() ]; } } }