Files
xk-api-yii/common/handlers/orderHandler/OrderPayedHandlerClass.php

180 lines
6.7 KiB
PHP
Raw Normal View History

2024-09-19 11:32:39 +08:00
<?php
namespace common\handlers\orderHandler;
use common\core\BaseModel;
use common\forms\order\CommonLog;
use common\forms\order\CommonOrder;
use common\forms\order\OrderRefundForm;
use common\jobs\CfOrderCancelJob;
use common\jobs\CfTemplateJob;
use common\jobs\TemplateJob;
use common\models\Order;
use common\models\OrderRefund;
use common\models\OrderSubAmount;
class OrderPayedHandlerClass extends BaseOrderPayedHandler
{
public function handle()
{
CommonLog::saveLog($this->event->order->id,'订单支付事件start');
self::execute();
CommonLog::saveLog($this->event->order->id,'订单支付事件end');
}
protected function execute()
{
$this->user = $this->event->order->user;
/**
* 订单是否取消状态(针对调起支付后,自动取消的订单)
* 退款且不执行后续操作
* $order 重新查一次最新的订单数据
*/
$order = Order::findOne($this->event->order->id);
if ($order->cancel_status == 1 && ($order->pay_type == 1 || $order->pay_type == 4)) {
CommonLog::saveLog($this->event->order->id,'调起支付后已经自动取消的订单进行退款');
$t = \Yii::$app->db->beginTransaction();
try {
// 生成售后订单
$orderRefund = new OrderRefund();
$orderRefund->mall_id = \Yii::$app->mall->id;
$orderRefund->user_id = $this->user->id;
$orderRefund->order_id = $order->id;
$orderRefund->order_detail_id = 0;
$orderRefund->order_no = Order::getOrderNo('RE');
$orderRefund->type = 1;
$orderRefund->refund_price = $order->total_pay_price;
$orderRefund->status = 2;
$orderRefund->is_refund = 1;
$res = $orderRefund->save();
if (!$res) {
throw new \Exception((new BaseModel())->getErrorMsg($orderRefund));
}
(new CommonOrder())->extraCancel($order);
(new OrderRefundForm())->refundMoney($orderRefund,$orderRefund->refund_price);
$t->commit();
} catch (\Exception $e) {
$t->rollBack();
CommonLog::saveLog($this->event->order->id,'调起支付后已经自动取消的订单进行退款异常:'.$e->getMessage());
}
return $this;
}else{
static::notice();
// static::pay();
}
return $this;
}
protected function notice()
{
// $this->sendSms()->sendMail()->receiptPrint('pay')
// ->sendTemplate()->sendMpTemplate()->sendTemplateMsgToMch()->sendBuyPrompt()->setGoods()->sendSmsToUser()->addShareOrder();
$this->setGoods()->setAutoCancel()->sendCfTemplate()->setSubAmount();
return $this;
}
/**
* 支付后分账记录状态调整
*/
public function setSubAmount()
{
OrderSubAmount::updateAll(['status'=>1],[
'order_id' => $this->event->order->id,
'mall_id' => $this->event->order->mall_id,
'status' => 0
]);
}
/**
* 超时未填写处方单取消订单退款
*/
public function setAutoCancel()
{
$order = Order::findOne($this->event->order->id);
if($order->prescription_status == 1){
\Yii::$app->queue4->delay(48*60*60)->push(new CfOrderCancelJob([
'orderId' => $this->event->order->id,
]));
}
return $this;
}
/**
* 处方单提醒消息
*/
public function sendCfTemplate()
{
$order = Order::findOne($this->event->order->id);
if($order->prescription_status == 1){
\Yii::$app->queue4->delay(5*60)->push(new CfTemplateJob([
'orderId' => $this->event->order->id,
"data" => [
'character_string1' => [
'value' => $this->event->order->order_no,
],
'phrase2' => [
'value' => '已付款',
],
'date3' => [
'value' => date("Y/m/d",$this->event->order->created_at),
],
'thing4' => [
'value' => '您的订单含有处方药,请尽快填写用药信息',
],
],
"page" => "/pages/PreliminaryInformation/PreliminaryInformation?orderInfo=".urlencode('{"order_id":'.$this->event->order->id.'}')
]));
\Yii::$app->queue4->delay(55*60)->push(new CfTemplateJob([
'orderId' => $this->event->order->id,
"data" => [
'character_string1' => [
'value' => $this->event->order->order_no,
],
'phrase2' => [
'value' => '已付款',
],
'date3' => [
'value' => date("Y/m/d",$this->event->order->created_at),
],
'thing4' => [
'value' => '您的订单含有处方药,请尽快填写用药信息',
],
],
"page" => "/pages/PreliminaryInformation/PreliminaryInformation?orderInfo=".urlencode('{"order_id":'.$this->event->order->id.'}')
]));
\Yii::$app->queue4->delay(24*60*60)->push(new CfTemplateJob([
'orderId' => $this->event->order->id,
"data" => [
'character_string1' => [
'value' => $this->event->order->order_no,
],
'phrase2' => [
'value' => '已付款',
],
'date3' => [
'value' => date("Y/m/d",$this->event->order->created_at),
],
'thing4' => [
'value' => '请尽快填写用药信息,超期将退款并关闭订单',
],
],
"page" => "/pages/PreliminaryInformation/PreliminaryInformation?orderInfo=".urlencode('{"order_id":'.$this->event->order->id.'}')
]));
}
return $this;
}
// protected function pay()
// {
// \Yii::error('--mall pay--');
// // 首次付款绑定下级--生成分销订单--下单用户成为分销商--设置卡密数据
// $this->saveResult()->becomeJuniorByFirstPay()->addShareOrder()->becomeShare()->setTypeData();
// return $this;
// }
}