# event事件
事件是處理不同業務之間關聯關系的核心,是插件擴展的重要組成部分
## event目錄(app下)
```
├─app
│ event 事件實現類文件
│ event.php 事件配置
```
## event目錄(addon下)
```
├─addon
│ event 事件實現類文件
│ config
│ ├─event.php 事件配置
```
**一,event.php事件配置**
~~~
'OrderComplete' => [
//訂單完成后執行 后續事件
'app\event\OrderComplete', //訂單支付后統計
], //訂單完成后執行事件
~~~
**二,event事件實現**
~~~
<?php
/**
* Niushop商城系統 - 團隊十年電商經驗匯集巨獻!
* =========================================================
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有權利。
* ----------------------------------------------
* 官方網址: https://www.niushop.com
* =========================================================
*/
namespace app\event;
use app\model\member\Member;
use app\model\member\MemberAccount;
use app\model\member\MemberLevel;
use app\model\order\OrderCommon;
/**
* 訂單完成后
*/
class OrderComplete
{
// 行為擴展的執行入口必須是run
public function handle($data)
{
//訂單返還積分
$order_model = new OrderCommon();
$condition = array(
['order_id', '=', $data['order_id']]
);
$order_info_result = $order_model->getOrderInfo($condition, 'order_money,order_status,site_id,member_id');
$order_info = $order_info_result['data'];
//如果缺失已完成
if ($order_info['order_status'] == 10) {
//會員等級 計算積分返還比率
$site_id = $order_info['site_id'];
$member_id = $order_info['member_id'];
$member_model = new Member();
$member_info_result = $member_model->getMemberInfo([['member_id', '=', $member_id], ['site_id', '=', $site_id]], 'member_level');
$member_info = $member_info_result['data'];
if ($member_info['member_level'] > 0) {
$member_level_model = new MemberLevel();
$member_level_info_result = $member_level_model->getMemberLevelInfo([['level_id', '=', $member_info['member_level']], ['site_id', '=', $site_id]], "point_feedback");
$member_level_info = $member_level_info_result['data'];
if ($member_level_info['point_feedback'] > 0) {
//計算返還的積分
$point = round($order_info['order_money'] * $member_level_info['point_feedback']);
$member_account_model = new MemberAccount();
$result = $member_account_model->addMemberAccount($site_id, $member_id, 'point', $point, 'order', '會員消費回饋積分', '會員消費獎勵發放');
if ($result['code'] < 0) {
return $result;
}
}
}
}
return $order_model->success();
}
}
~~~
**一,event調用**
event("OrderComplete", $order);
~~~
/**
* 訂單完成
*
* @param int $order_id
*/
public function orderComplete($order_id)
{
$cache = Cache::get('order_complete_execute_' . $order_id);
if (empty($cache)) {
Cache::set('order_complete_execute_' . $order_id, 1);
} else {
return $this->success();
}
$lock_result = $this->verifyOrderLock($order_id);
if ($lock_result[ 'code' ] < 0)
return $lock_result;
$order_info = model('order')->getInfo([ [ 'order_id', '=', $order_id ] ], 'member_id, order_money, refund_money,order_status,site_id');
if ($order_info[ 'order_status' ] == self::ORDER_COMPLETE) {
return $this->success();
}
$order_data = array (
'order_status' => self::ORDER_COMPLETE,
'order_status_name' => $this->order_status[ self::ORDER_COMPLETE ][ 'name' ],
'order_status_action' => json_encode($this->order_status[ self::ORDER_COMPLETE ], JSON_UNESCAPED_UNICODE),
'finish_time' => time()
);
$config = new Config();
$order_event = $config->getOrderEventTimeConfig($order_info[ 'site_id' ]);
$after_sales_time = $order_event[ 'data' ][ 'value' ][ 'after_sales_time' ] ?? 0;
if ($after_sales_time > 0) {
$cron = new Cron();
$execute_time = strtotime("+ {$after_sales_time} day");
$cron->addCron(1, 0, '訂單售后自動關閉', 'CronOrderAfterSaleClose', $execute_time, $order_id);
} else {
$order_data[ 'is_enable_refund' ] = 0;
}
$res = model('order')->update($order_data, [ [ 'order_id', '=', $order_id ] ]);
Cache::set('order_complete_execute_' . $order_id, '');
//修改用戶表order_complete_money和order_complete_num
model('member')->setInc([ [ 'member_id', '=', $order_info[ 'member_id' ] ] ], 'order_complete_money', $order_info[ 'order_money' ] - $order_info[ 'refund_money' ]);
model('member')->setInc([ [ 'member_id', '=', $order_info[ 'member_id' ] ] ], 'order_complete_num');
event('OrderComplete', [ 'order_id' => $order_id ]);
$order_refund_model = new OrderRefund();
//訂單項移除可退款操作
$order_refund_model->removeOrderGoodsRefundAction([ [ 'order_id', '=', $order_id ] ]);
//訂單完成
$message_model = new Message();
$message_model->sendMessage([ 'keywords' => 'ORDER_COMPLETE', 'order_id' => $order_id, 'site_id' => $order_info[ 'site_id' ] ]);
// 買家訂單完成通知商家
$message_model->sendMessage([ 'keywords' => 'BUYER_ORDER_COMPLETE', 'order_id' => $order_id, 'site_id' => $order_info[ 'site_id' ] ]);
return $this->success($res);
}
~~~
- 序言
- 安裝教程
- 運行環境
- 安裝手冊
- 基礎
- 前期準備
- 偽靜態配置
- 后臺目錄結構
- uniapp(手機端)目錄結構
- 開發命名規范
- 控制器命名規范
- model層命名規范
- 前端(管理頁面)命名規范
- 提示面板
- 表單
- uniapp(手機端)命名規范
- api接口命名規范
- 架構
- 入口文件
- config設置
- app應用目錄
- component(自定義模板組件)
- model層(數據業務層)
- 數據庫操作
- job(消息隊列)
- event(事件)
- request(請求對象)
- common(公共函數)
- log(日志處理)
- lang(語言包)
- addon插件
- 數據字典
- 系統基礎表
- 配送相關表
- 商品相關表
- 網站設置相關
- 會員相關表
- 訂單相關表
- 營銷(組合套餐)
- 營銷(砍價)
- 營銷(優惠券)
- 營銷(滿減)
- 營銷(拼團)
- 營銷(秒殺)
- 店鋪相關表
- 微信相關表
- 門店相關表
- 結算相關表
- 應用(分銷)
- 功能模塊
- 商品模塊
- 會員模塊
- 訂單模塊
- 數據統計
- 消息隊列
- 支付模塊
- 短信模塊
- 客服
- api接口
- 接口開發
- 插件開發
- 事件開發
- 常用事件
- 插件目錄與開發
- 常用插件
- 支付插件
- 拼團插件
- 新人禮