| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284 |
- <?php
- /**
- * 重庆赤晓店信息科技有限公司
- * https://www.chixiaodian.com
- * Copyright (c) 2023 赤店商城 All rights reserved.
- */
- namespace app\jobs;
- use app\models\MdProfit;
- use app\models\Order;
- use app\models\OrderDetail;
- use app\models\PtActivity;
- use app\models\PtActivityGoods;
- use app\models\PtActivityOrder;
- use app\models\PtActivityOrderDetail;
- use app\models\Store;
- use app\modules\admin\models\MerchantForm;
- use app\modules\admin\models\pt\PtActivityOrderForm;
- use app\modules\client\models\OrderComplete;
- use app\modules\client\models\v1\order\OrderForm;
- use app\modules\client\models\v1\ShareMoneyForm;
- use app\utils\OrderNo;
- use yii\base\BaseObject;
- use yii\queue\JobInterface;
- /**
- * 拼团订单处理
- */
- class CreatedPtOrderJob extends BaseObject implements JobInterface
- {
- public int $order_id;
- public function execute($queue)
- {
- try {
- debug_log('拼团处理:' . $this->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()
- ];
- }
- }
- }
|