# app應用
系統相關的控制器,業務,中間件,以及事件等都會放在app目錄下面
## app目錄
```
├─app
│ api 基礎功能接口控制器
│ component 基礎模板組件控制器
│ cron 基礎任務控制器
│ event 基礎事件類
│ exception 異常處理類
│ index index控制器
│ install install控制器
│ job 消息隊列
│ lang 語言包
│ model 數據業務層
│ pay 支付回調控制器
│ shop 后臺管理端控制器
│ shopapi 后臺管理端api接口
│ common.php 公共函數
│ middleware.php 中間件配置
│ event.php 事件配置
│ Request.php 請求擴展
```
**一,component目錄:主要指自定義模板組件后臺配置部分**
~~~
<?php
namespace app\component\controller;
/**
* 文本·組件
*/
class Text extends BaseDiyView
{
/**
* 后臺編輯界面
*/
public function design()
{
return $this->fetch("text/design.html");
}
}
~~~
* * *
**二,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();
}
}
~~~
* * *
**三,job目錄:消息隊列執行目錄**
關于消息隊列的使用方式,之后的教程會進行說明,這里主要是指消息隊列的實現。
~~~
<?php
namespace app\job;
use app\model\system\Cron;
use think\facade\Log;
use think\queue\Job;
/**
* 事件通過隊列異步調用
* Class Eventasync
* @package app\job
*/
class Cronexecute
{
public function fire(Job $job, $data)
{
$job->delete();
try {
$res = event($data[ 'event' ], [ 'relate_id' => $data[ 'relate_id' ] ]);
$data_log = [
'name' => $data[ 'name' ],
'event' => $data[ 'event' ],
'relate_id' => $data[ 'relate_id' ],
'message' => json_encode($res)
];
Log::write("計劃任務:{$data[ 'event' ]} relate_id: {$data[ 'relate_id' ]}執行結果:" . json_encode($res, JSON_UNESCAPED_UNICODE));
$cron_model = new Cron();
$cron_model->addCronLog($data_log);
} catch (\Exception $e) {
Log::write($e->getMessage());
$job->delete();
}
}
}
~~~
* * *
**四,model目錄:數據業務層**
系統以及插件的model層主要用于實現對應的數據業務邏輯,控制器不能直接調用數據庫,要調用model層實現。
* * *
- 序言
- 安裝教程
- 運行環境
- 安裝手冊
- 基礎
- 前期準備
- 偽靜態配置
- 后臺目錄結構
- uniapp(手機端)目錄結構
- 開發命名規范
- 控制器命名規范
- model層命名規范
- 前端(管理頁面)命名規范
- 提示面板
- 表單
- uniapp(手機端)命名規范
- api接口命名規范
- 架構
- 入口文件
- config設置
- app應用目錄
- component(自定義模板組件)
- model層(數據業務層)
- 數據庫操作
- job(消息隊列)
- event(事件)
- request(請求對象)
- common(公共函數)
- log(日志處理)
- lang(語言包)
- addon插件
- 數據字典
- 系統基礎表
- 配送相關表
- 商品相關表
- 網站設置相關
- 會員相關表
- 訂單相關表
- 營銷(組合套餐)
- 營銷(砍價)
- 營銷(優惠券)
- 營銷(滿減)
- 營銷(拼團)
- 營銷(秒殺)
- 店鋪相關表
- 微信相關表
- 門店相關表
- 結算相關表
- 應用(分銷)
- 功能模塊
- 商品模塊
- 會員模塊
- 訂單模塊
- 數據統計
- 消息隊列
- 支付模塊
- 短信模塊
- 客服
- api接口
- 接口開發
- 插件開發
- 事件開發
- 常用事件
- 插件目錄與開發
- 常用插件
- 支付插件
- 拼團插件
- 新人禮