180 lines
6.7 KiB
PHP
180 lines
6.7 KiB
PHP
<?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;
|
|
// }
|
|
}
|