From 4168f184e9c0c02a90a4756d219bdff199021bee Mon Sep 17 00:00:00 2001 From: xiaochong0302 Date: Mon, 24 Aug 2020 20:52:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9E=9A=E4=B8=BE=E7=B1=BB=E5=9E=8B=E7=94=B1?= =?UTF-8?q?=E5=AD=97=E7=AC=A6->=E6=95=B4=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 + app/Console/Tasks/LiveNoticeConsumerTask.php | 14 ++-- app/Console/Tasks/OrderTask.php | 42 +++++----- app/Http/Admin/Views/chapter/edit_lesson.volt | 18 ++--- app/Http/Admin/Views/chapter/lessons.volt | 6 +- app/Http/Admin/Views/course/add.volt | 15 ++-- app/Http/Admin/Views/course/edit_basic.volt | 8 +- app/Http/Admin/Views/course/list.volt | 14 ++-- app/Http/Admin/Views/course/search.volt | 14 ++-- app/Http/Admin/Views/im/group/add.volt | 6 +- app/Http/Admin/Views/im/group/list.volt | 6 +- app/Http/Admin/Views/im/group/search.volt | 5 +- app/Http/Admin/Views/order/macro.volt | 42 +++++----- app/Http/Admin/Views/order/search.volt | 19 ++--- app/Http/Admin/Views/refund/macro.volt | 24 +++--- app/Http/Admin/Views/refund/search.volt | 10 +-- app/Http/Admin/Views/refund/show.volt | 4 +- app/Http/Admin/Views/trade/macro.volt | 20 ++--- app/Http/Admin/Views/trade/search.volt | 12 +-- app/Http/Desktop/Controllers/MyController.php | 12 --- app/Http/Desktop/Views/course/packages.volt | 2 +- .../Desktop/Views/course/show_catalog.volt | 6 +- app/Http/Desktop/Views/course/show_meta.volt | 4 +- app/Http/Desktop/Views/course/show_order.volt | 4 +- app/Http/Desktop/Views/error/show400.volt | 1 + app/Http/Desktop/Views/error/shutdown.volt | 2 + app/Http/Desktop/Views/macros/course.volt | 14 ++-- app/Http/Desktop/Views/macros/group.volt | 6 +- app/Http/Desktop/Views/macros/order.volt | 40 +++++----- app/Http/Desktop/Views/macros/refund.volt | 24 +++--- app/Http/Desktop/Views/my/orders.volt | 6 +- app/Http/Desktop/Views/my/refunds.volt | 4 +- app/Http/Desktop/Views/vip/index.volt | 2 +- app/Listeners/Pay.php | 2 +- app/Models/Chapter.php | 8 +- app/Models/Client.php | 26 +++++++ app/Models/Course.php | 14 ++-- app/Models/CourseUser.php | 17 ++-- app/Models/ImGroup.php | 6 +- app/Models/ImMessage.php | 2 +- app/Models/Learning.php | 10 +-- app/Models/Order.php | 78 +++++++------------ app/Models/Refund.php | 48 ++++++------ app/Models/Task.php | 12 +-- app/Models/Trade.php | 12 +-- app/Providers/FlashSession.php | 25 ++++++ app/Providers/Url.php | 1 - app/Repos/ImGroup.php | 4 + app/Services/Frontend/Account/Register.php | 2 +- app/Services/Frontend/My/OrderList.php | 7 ++ app/Services/Frontend/My/RefundList.php | 7 ++ app/Services/Frontend/Order/OrderCreate.php | 11 +++ app/Traits/Client.php | 5 +- app/Validators/Course.php | 10 +-- app/Validators/Order.php | 11 +++ app/Validators/Refund.php | 27 +++++-- app/Validators/Trade.php | 13 +++- bootstrap/ConsoleKernel.php | 1 + bootstrap/HttpKernel.php | 3 + config/errors.php | 4 +- config/xs.group.ini | 28 ------- config/xs.user.ini | 32 -------- 62 files changed, 432 insertions(+), 402 deletions(-) create mode 100644 app/Models/Client.php create mode 100644 app/Providers/FlashSession.php delete mode 100644 config/xs.group.ini delete mode 100644 config/xs.user.ini diff --git a/.gitignore b/.gitignore index 67677604..c1687295 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,8 @@ /vendor /config/config.php /config/xs.course.ini +/config/xs.group.ini +/config/xs.user.ini /public/robots.txt /public/sitemap.xml *KgTest* diff --git a/app/Console/Tasks/LiveNoticeConsumerTask.php b/app/Console/Tasks/LiveNoticeConsumerTask.php index fe2fa948..36f4f9cc 100644 --- a/app/Console/Tasks/LiveNoticeConsumerTask.php +++ b/app/Console/Tasks/LiveNoticeConsumerTask.php @@ -46,24 +46,24 @@ class LiveNoticeConsumerTask extends Task $now = time(); + $removeList = []; + foreach ($members as $member) { list($chapterId, $userId, $startTime) = explode(':', $member); - $remove = false; - if ($now - $startTime < 3600) { $smser->handle($chapterId, $userId, $startTime); - $remove = true; + $removeList[] = $member; } if ($now > $startTime) { - $remove = true; + $removeList[] = $member; } + } - if ($remove) { - $this->redis->sRem($cacheKey, $member); - } + if (count($removeList) > 0) { + $this->redis->sRem($cacheKey, ...$removeList); } } diff --git a/app/Console/Tasks/OrderTask.php b/app/Console/Tasks/OrderTask.php index a7182496..a5c78aaa 100644 --- a/app/Console/Tasks/OrderTask.php +++ b/app/Console/Tasks/OrderTask.php @@ -54,17 +54,14 @@ class OrderTask extends Task case OrderModel::ITEM_VIP: $this->handleVipOrder($order); break; - case OrderModel::ITEM_REWARD: - $this->handleRewardOrder($order); - break; } + $this->finishOrder($order); + $task->status = TaskModel::STATUS_FINISHED; $task->update(); - $this->handleOrderNotice($order); - } catch (\Exception $e) { $task->try_count += 1; @@ -76,7 +73,7 @@ class OrderTask extends Task $task->update(); - $logger->info('Order Task Exception ' . kg_json_encode([ + $logger->info('Order Process Exception ' . kg_json_encode([ 'line' => $e->getLine(), 'code' => $e->getCode(), 'message' => $e->getMessage(), @@ -84,15 +81,23 @@ class OrderTask extends Task ])); } - /** - * 任务失败,申请退款 - */ - if ($task->status == TaskModel::STATUS_FAILED) { + if ($task->status == TaskModel::STATUS_FINISHED) { + $this->handleOrderNotice($order); + } elseif ($task->status == TaskModel::STATUS_FAILED) { $this->handleOrderRefund($order); } } } + protected function finishOrder(OrderModel $order) + { + $order->status = OrderModel::STATUS_FINISHED; + + if ($order->update() === false) { + throw new \RuntimeException('Finish Order Failed'); + } + } + protected function handleCourseOrder(OrderModel $order) { /** @@ -101,7 +106,7 @@ class OrderTask extends Task $itemInfo = $order->item_info; $data = [ - 'user_id' => $order->user_id, + 'user_id' => $order->owner_id, 'course_id' => $order->item_id, 'expiry_time' => $itemInfo['course']['study_expiry_time'], 'role_type' => CourseUserModel::ROLE_STUDENT, @@ -111,7 +116,7 @@ class OrderTask extends Task $courseUser = new CourseUserModel(); if ($courseUser->create($data) === false) { - throw new \RuntimeException('Create CourseQuery User Failed'); + throw new \RuntimeException('Create Course User Failed'); } } @@ -125,7 +130,7 @@ class OrderTask extends Task foreach ($itemInfo['courses'] as $course) { $data = [ - 'user_id' => $order->user_id, + 'user_id' => $order->owner_id, 'course_id' => $course['id'], 'expiry_time' => $course['study_expiry_time'], 'role_type' => CourseUserModel::ROLE_STUDENT, @@ -144,7 +149,7 @@ class OrderTask extends Task { $userRepo = new UserRepo(); - $user = $userRepo->findById($order->user_id); + $user = $userRepo->findById($order->owner_id); /** * @var array $itemInfo @@ -158,11 +163,6 @@ class OrderTask extends Task } } - protected function handleRewardOrder(OrderModel $order) - { - - } - protected function handleOrderNotice(OrderModel $order) { $smser = new OrderSmser(); @@ -180,11 +180,11 @@ class OrderTask extends Task $refund->subject = $order->subject; $refund->amount = $order->amount; - $refund->apply_note = '开通服务失败,自动退款'; - $refund->review_note = '自动操作'; $refund->user_id = $order->user_id; $refund->order_id = $order->id; $refund->trade_id = $trade->id; + $refund->apply_note = '开通服务失败,自动退款'; + $refund->review_note = '自动操作'; $refund->create(); } diff --git a/app/Http/Admin/Views/chapter/edit_lesson.volt b/app/Http/Admin/Views/chapter/edit_lesson.volt index 4ea5ca6e..c75920da 100644 --- a/app/Http/Admin/Views/chapter/edit_lesson.volt +++ b/app/Http/Admin/Views/chapter/edit_lesson.volt @@ -3,11 +3,11 @@ {% block content %} {%- macro content_title(model) %} - {% if model == 'vod' %} + {% if model == '1' %} 点播信息 - {% elseif model == 'live' %} + {% elseif model == '2' %} 直播信息 - {% elseif model == 'read' %} + {% elseif model == '3' %} 图文信息 {% endif %} {%- endmacro %} @@ -26,11 +26,11 @@ {{ partial('chapter/edit_lesson_basic') }}
- {% if course.model == 'vod' %} + {% if course.model == '1' %} {{ partial('chapter/edit_lesson_vod') }} - {% elseif course.model == 'live' %} + {% elseif course.model == '2' %} {{ partial('chapter/edit_lesson_live') }} - {% elseif course.model == 'read' %} + {% elseif course.model == '3' %} {{ partial('chapter/edit_lesson_read') }} {% endif %}
@@ -41,7 +41,7 @@ {% block link_css %} - {% if chapter.model == 'read' %} + {% if chapter.model == '3' %} {{ css_link('https://cdn.jsdelivr.net/npm/vditor/dist/index.css', false) }} {% endif %} @@ -49,12 +49,12 @@ {% block include_js %} - {% if chapter.model == 'read' %} + {% if chapter.model == '3' %} {{ js_include('https://cdn.jsdelivr.net/npm/vditor/dist/index.min.js', false) }} {{ js_include('admin/js/vditor.js') }} - {% elseif chapter.model == 'vod' %} + {% elseif chapter.model == '1' %} {{ js_include('lib/vod-js-sdk-v6.min.js') }} {{ js_include('lib/clipboard.min.js') }} diff --git a/app/Http/Admin/Views/chapter/lessons.volt b/app/Http/Admin/Views/chapter/lessons.volt index 76fffb68..26246c29 100644 --- a/app/Http/Admin/Views/chapter/lessons.volt +++ b/app/Http/Admin/Views/chapter/lessons.volt @@ -21,11 +21,11 @@ - {% if course.model == 'vod' %} + {% if course.model == '1' %} {{ partial('chapter/lessons_vod') }} - {% elseif course.model == 'live' %} + {% elseif course.model == '2' %} {{ partial('chapter/lessons_live') }} - {% elseif course.model == 'read' %} + {% elseif course.model == '3' %} {{ partial('chapter/lessons_read') }} {% endif %} diff --git a/app/Http/Admin/Views/course/add.volt b/app/Http/Admin/Views/course/add.volt index 18dfdafa..66a731bf 100644 --- a/app/Http/Admin/Views/course/add.volt +++ b/app/Http/Admin/Views/course/add.volt @@ -9,9 +9,9 @@
- - - + + +
@@ -47,9 +47,9 @@ var form = layui.form; var modelTips = { - vod: '通过音视频呈现课程内容,内容可视化,有图像有声音,适合大部分场景', - live: '通过直播呈现课程内容,交互性强,适合需要交互反馈、情绪表达的场景', - read: '通过图文呈现课程内容,简单直接,适合撰写文档、书籍、教程的场景' + '1': '通过音视频呈现课程内容,内容可视化,有图像有声音,适合大部分场景', + '2': '通过直播呈现课程内容,交互性强,适合需要交互反馈、情绪表达的场景', + '3': '通过图文呈现课程内容,简单直接,适合撰写文档、书籍、教程的场景' }; var modelTipsBlock = $('#model-tips'); @@ -58,8 +58,7 @@ modelTipsBlock.html(modelTips[data.value]); }); - modelTipsBlock.html(modelTips.vod); - + modelTipsBlock.html(modelTips['1']); }); diff --git a/app/Http/Admin/Views/course/edit_basic.volt b/app/Http/Admin/Views/course/edit_basic.volt index e9478094..7d3d5703 100644 --- a/app/Http/Admin/Views/course/edit_basic.volt +++ b/app/Http/Admin/Views/course/edit_basic.volt @@ -30,10 +30,10 @@
- - - - + + + +
diff --git a/app/Http/Admin/Views/course/list.volt b/app/Http/Admin/Views/course/list.volt index e46a716d..3e835878 100644 --- a/app/Http/Admin/Views/course/list.volt +++ b/app/Http/Admin/Views/course/list.volt @@ -3,24 +3,24 @@ {% block content %} {%- macro model_info(value) %} - {% if value == 'vod' %} + {% if value == 1 %} 点播 - {% elseif value == 'live' %} + {% elseif value == 2 %} 直播 - {% elseif value == 'read' %} + {% elseif value == 3 %} 图文 {% endif %} {%- endmacro %} {%- macro level_info(value) %} 难度: - {% if value == 'entry' %} + {% if value == 1 %} 入门 - {% elseif value == 'junior' %} + {% elseif value == 2 %} 初级 - {% elseif value == 'medium' %} + {% elseif value == 3 %} 中级 - {% elseif value == 'senior' %} + {% elseif value == 4 %} 高级 {% endif %} diff --git a/app/Http/Admin/Views/course/search.volt b/app/Http/Admin/Views/course/search.volt index 688811d2..06be131d 100644 --- a/app/Http/Admin/Views/course/search.volt +++ b/app/Http/Admin/Views/course/search.volt @@ -33,18 +33,18 @@
- - - + + +
- - - - + + + +
diff --git a/app/Http/Admin/Views/im/group/add.volt b/app/Http/Admin/Views/im/group/add.volt index fd2cac5a..28c8724b 100644 --- a/app/Http/Admin/Views/im/group/add.volt +++ b/app/Http/Admin/Views/im/group/add.volt @@ -21,9 +21,9 @@
- - - + + +
diff --git a/app/Http/Admin/Views/im/group/list.volt b/app/Http/Admin/Views/im/group/list.volt index 923c1478..1998f9dc 100644 --- a/app/Http/Admin/Views/im/group/list.volt +++ b/app/Http/Admin/Views/im/group/list.volt @@ -3,10 +3,12 @@ {% block content %} {%- macro type_info(value) %} - {% if value == 'course' %} + {% if value == 1 %} - {% elseif value == 'chat' %} + {% elseif value == 2 %} + {% elseif value == 3 %} + {% endif %} {%- endmacro %} diff --git a/app/Http/Admin/Views/im/group/search.volt b/app/Http/Admin/Views/im/group/search.volt index 2769b899..9ce882e2 100644 --- a/app/Http/Admin/Views/im/group/search.volt +++ b/app/Http/Admin/Views/im/group/search.volt @@ -33,8 +33,9 @@
- - + + +
diff --git a/app/Http/Admin/Views/order/macro.volt b/app/Http/Admin/Views/order/macro.volt index 63f5b67b..4fcbf361 100644 --- a/app/Http/Admin/Views/order/macro.volt +++ b/app/Http/Admin/Views/order/macro.volt @@ -1,12 +1,12 @@ {%- macro item_info(order) %} - {% if order.item_type == 'course' %} + {% if order.item_type == '1' %} {% set course = order.item_info['course'] %}

课程名称:{{ course['title'] }}

市场价格:{{ '¥%0.2f'|format(course['market_price']) }},会员价格:{{ '¥%0.2f'|format(course['vip_price']) }}

学习期限:{{ date('Y-m-d H:i:s',course['study_expiry_time']) }},退款期限:{{ date('Y-m-d H:i:s',course['refund_expiry_time']) }}

- {% elseif order.item_type == 'package' %} + {% elseif order.item_type == '2' %} {% set courses = order.item_info['courses'] %} {% for course in courses %}
@@ -15,20 +15,20 @@

学习期限:{{ date('Y-m-d H:i:s',course['study_expiry_time']) }},退款期限:{{ date('Y-m-d H:i:s',course['refund_expiry_time']) }}

{% endfor %} - {% elseif order.item_type == 'vip' %} - {% set vip = order.item_info['vip'] %} -
-

商品名称:{{ order.subject }}

-

商品价格:{{ '¥%0.2f'|format(order.amount) }}

-
- {% elseif order.item_type == 'reward' %} + {% elseif order.item_type == '3' %} {% set course = order.item_info['course'] %} {% set reward = order.item_info['reward'] %}

商品名称:{{ order.subject }}

商品价格:{{ '¥%0.2f'|format(order.amount) }}

- {% elseif order.item_type == 'test' %} + {% elseif order.item_type == '4' %} + {% set vip = order.item_info['vip'] %} +
+

商品名称:{{ order.subject }}

+

商品价格:{{ '¥%0.2f'|format(order.amount) }}

+
+ {% elseif order.item_type == '99' %}

商品名称:{{ order.subject }}

商品价格:{{ '¥%0.2f'|format(order.amount) }}

@@ -37,27 +37,29 @@ {%- endmacro %} {%- macro item_type(value) %} - {% if value == 'course' %} + {% if value == 1 %} 课程 - {% elseif value == 'package' %} + {% elseif value == 2 %} 套餐 - {% elseif value == 'vip' %} - 会员 - {% elseif value == 'reward' %} + {% elseif value == 3 %} 赞赏 - {% elseif value == 'test' %} + {% elseif value == 4 %} + 会员 + {% elseif value == 99 %} 测试 {% endif %} {%- endmacro %} {%- macro order_status(value) %} - {% if value == 'pending' %} + {% if value == 1 %} 待支付 - {% elseif value == 'finished' %} + {% elseif value == 2 %} + 发货中 + {% elseif value == 3 %} 已完成 - {% elseif value == 'closed' %} + {% elseif value == 4 %} 已关闭 - {% elseif value == 'refunded' %} + {% elseif value == 5 %} 已退款 {% endif %} {%- endmacro %} \ No newline at end of file diff --git a/app/Http/Admin/Views/order/search.volt b/app/Http/Admin/Views/order/search.volt index f5e88b47..627fbc31 100644 --- a/app/Http/Admin/Views/order/search.volt +++ b/app/Http/Admin/Views/order/search.volt @@ -21,20 +21,21 @@
- - - - - + + + + +
- - - - + + + + +
diff --git a/app/Http/Admin/Views/refund/macro.volt b/app/Http/Admin/Views/refund/macro.volt index 2b593d36..d377f90e 100644 --- a/app/Http/Admin/Views/refund/macro.volt +++ b/app/Http/Admin/Views/refund/macro.volt @@ -1,32 +1,32 @@ {%- macro refund_status(value) %} - {% if value == 'pending' %} + {% if value == 1 %} 待处理 - {% elseif value == 'canceled' %} + {% elseif value == 2 %} 已取消 - {% elseif value == 'approved' %} + {% elseif value == 3 %} 已审核 - {% elseif value == 'refused' %} + {% elseif value == 4 %} 已拒绝 - {% elseif value == 'finished' %} + {% elseif value == 5 %} 已完成 - {% elseif value == 'failed' %} + {% elseif value == 6 %} 已失败 {% endif %} {%- endmacro %} {%- macro refund_status_history(items) %} {% for item in items %} - {% if item.status == 'pending' %} + {% if item.status == 1 %}

创建时间:{{ date('Y-m-d H:i:s',item.create_time) }}

- {% elseif item.status == 'canceled' %} + {% elseif item.status == 2 %}

取消时间:{{ date('Y-m-d H:i:s',item.create_time) }}

- {% elseif item.status == 'approved' %} + {% elseif item.status == 3 %}

过审时间:{{ date('Y-m-d H:i:s',item.create_time) }}

- {% elseif item.status == 'refused' %} + {% elseif item.status == 4 %}

拒绝时间:{{ date('Y-m-d H:i:s',item.create_time) }}

- {% elseif item.status == 'finished' %} + {% elseif item.status == 5 %}

完成时间:{{ date('Y-m-d H:i:s',item.create_time) }}

- {% elseif item.status == 'failed' %} + {% elseif item.status == 6 %}

失败时间:{{ date('Y-m-d H:i:s',item.create_time) }}

{% endif %} {% endfor %} diff --git a/app/Http/Admin/Views/refund/search.volt b/app/Http/Admin/Views/refund/search.volt index 9052e119..73489a4b 100644 --- a/app/Http/Admin/Views/refund/search.volt +++ b/app/Http/Admin/Views/refund/search.volt @@ -21,11 +21,11 @@
- - - - - + + + + +
diff --git a/app/Http/Admin/Views/refund/show.volt b/app/Http/Admin/Views/refund/show.volt index 36ab2bac..fbaaaa9e 100644 --- a/app/Http/Admin/Views/refund/show.volt +++ b/app/Http/Admin/Views/refund/show.volt @@ -47,8 +47,8 @@
- - + +
diff --git a/app/Http/Admin/Views/trade/macro.volt b/app/Http/Admin/Views/trade/macro.volt index 57ff020a..3f5ecf2a 100644 --- a/app/Http/Admin/Views/trade/macro.volt +++ b/app/Http/Admin/Views/trade/macro.volt @@ -1,32 +1,32 @@ {%- macro channel_type(value) %} - {% if value == 'alipay' %} + {% if value == '1' %} 支付宝 - {% elseif value == 'wxpay' %} + {% elseif value == '2' %} 微信 {% endif %} {%- endmacro %} {%- macro trade_status(value) %} - {% if value == 'pending' %} + {% if value == 1 %} 待支付 - {% elseif value == 'finished' %} + {% elseif value == 2 %} 已完成 - {% elseif value == 'closed' %} + {% elseif value == 3 %} 已关闭 - {% elseif value == 'refunded' %} + {% elseif value == 4 %} 已退款 {% endif %} {%- endmacro %} {%- macro trade_status_history(items) %} {% for item in items %} - {% if item.status == 'pending' %} + {% if item.status == 1 %}

创建时间:{{ date('Y-m-d H:i:s',item.create_time) }}

- {% elseif item.status == 'finished' %} + {% elseif item.status == 2 %}

完成时间:{{ date('Y-m-d H:i:s',item.create_time) }}

- {% elseif item.status == 'closed' %} + {% elseif item.status == 3 %}

关闭时间:{{ date('Y-m-d H:i:s',item.create_time) }}

- {% elseif item.status == 'refunded' %} + {% elseif item.status == 4 %}

退款时间:{{ date('Y-m-d H:i:s',item.create_time) }}

{% endif %} {% endfor %} diff --git a/app/Http/Admin/Views/trade/search.volt b/app/Http/Admin/Views/trade/search.volt index 57e09669..8f8c9a1b 100644 --- a/app/Http/Admin/Views/trade/search.volt +++ b/app/Http/Admin/Views/trade/search.volt @@ -21,17 +21,17 @@
- - + +
- - - - + + + +
diff --git a/app/Http/Desktop/Controllers/MyController.php b/app/Http/Desktop/Controllers/MyController.php index 349e1e91..e9581bb5 100644 --- a/app/Http/Desktop/Controllers/MyController.php +++ b/app/Http/Desktop/Controllers/MyController.php @@ -70,8 +70,6 @@ class MyController extends Controller $pager = $service->handle(); - $pager->items = kg_array_object($pager->items); - $this->view->setVar('pager', $pager); } @@ -84,8 +82,6 @@ class MyController extends Controller $pager = $service->handle(); - $pager->items = kg_array_object($pager->items); - $this->view->setVar('pager', $pager); } @@ -98,8 +94,6 @@ class MyController extends Controller $pager = $service->handle(); - $pager->items = kg_array_object($pager->items); - $this->view->setVar('pager', $pager); } @@ -112,8 +106,6 @@ class MyController extends Controller $pager = $service->handle(); - $pager->items = kg_array_object($pager->items); - $this->view->setVar('pager', $pager); } @@ -126,8 +118,6 @@ class MyController extends Controller $pager = $service->handle(); - $pager->items = kg_array_object($pager->items); - $this->view->setVar('pager', $pager); } @@ -140,8 +130,6 @@ class MyController extends Controller $pager = $service->handle(); - $pager->items = kg_array_object($pager->items); - $this->view->setVar('pager', $pager); } diff --git a/app/Http/Desktop/Views/course/packages.volt b/app/Http/Desktop/Views/course/packages.volt index fad4fb67..111237a7 100644 --- a/app/Http/Desktop/Views/course/packages.volt +++ b/app/Http/Desktop/Views/course/packages.volt @@ -1,6 +1,6 @@
{% for package in packages %} - {% set order_url = url({'for':'desktop.order.confirm'},{'item_id':package.id,'item_type':'package'}) %} + {% set order_url = url({'for':'desktop.order.confirm'},{'item_id':package.id,'item_type':2}) %}
{{ package.title }}
diff --git a/app/Http/Desktop/Views/course/show_catalog.volt b/app/Http/Desktop/Views/course/show_catalog.volt index 737eb216..790a8b61 100644 --- a/app/Http/Desktop/Views/course/show_catalog.volt +++ b/app/Http/Desktop/Views/course/show_catalog.volt @@ -53,11 +53,11 @@
    {% for lesson in chapter.children %} - {% if lesson.model == 'vod' %} + {% if lesson.model == '1' %}
  • {{ vod_lesson_info(lesson) }}
  • - {% elseif lesson.model == 'live' %} + {% elseif lesson.model == '2' %}
  • {{ live_lesson_info(lesson) }}
  • - {% elseif lesson.model == 'read' %} + {% elseif lesson.model == '3' %}
  • {{ read_lesson_info(lesson) }}
  • {% endif %} {% endfor %} diff --git a/app/Http/Desktop/Views/course/show_meta.volt b/app/Http/Desktop/Views/course/show_meta.volt index b39e56f8..d83435a8 100644 --- a/app/Http/Desktop/Views/course/show_meta.volt +++ b/app/Http/Desktop/Views/course/show_meta.volt @@ -3,11 +3,11 @@ {{ course.title|e }}
- {% if course.model == 'vod' %} + {% if course.model == '1' %}

课程时长{{ course.attrs.duration|duration }}

- {% elseif course.model == 'live' %} + {% elseif course.model == '2' %}

直播时间{{ course.attrs.start_date }} ~ {{ course.attrs.end_date }}

diff --git a/app/Http/Desktop/Views/course/show_order.volt b/app/Http/Desktop/Views/course/show_order.volt index d6937169..1158c93f 100644 --- a/app/Http/Desktop/Views/course/show_order.volt +++ b/app/Http/Desktop/Views/course/show_order.volt @@ -1,5 +1,5 @@ {% if course.me.owned == 0 and course.market_price > 0 %} - {% set order_url = url({'for':'desktop.order.confirm'},{'item_id':course.id,'item_type':'course'}) %} + {% set order_url = url({'for':'desktop.order.confirm'},{'item_id':course.id,'item_type':1}) %} @@ -13,7 +13,7 @@ diff --git a/app/Http/Desktop/Views/error/show400.volt b/app/Http/Desktop/Views/error/show400.volt index b7dc4c3c..ddde2a54 100644 --- a/app/Http/Desktop/Views/error/show400.volt +++ b/app/Http/Desktop/Views/error/show400.volt @@ -5,6 +5,7 @@
+
{{ flashSession.output() }}

4 diff --git a/app/Http/Desktop/Views/error/shutdown.volt b/app/Http/Desktop/Views/error/shutdown.volt index 0f2e95fd..91c1e5f2 100644 --- a/app/Http/Desktop/Views/error/shutdown.volt +++ b/app/Http/Desktop/Views/error/shutdown.volt @@ -1,6 +1,7 @@ {% extends 'templates/error.volt' %} {% block content %} +
@@ -14,4 +15,5 @@

+ {% endblock %} \ No newline at end of file diff --git a/app/Http/Desktop/Views/macros/course.volt b/app/Http/Desktop/Views/macros/course.volt index 84efe696..28b1341d 100644 --- a/app/Http/Desktop/Views/macros/course.volt +++ b/app/Http/Desktop/Views/macros/course.volt @@ -1,21 +1,21 @@ {%- macro model_info(value) %} - {% if value == 'vod' %} + {% if value == '1' %} 点播 - {% elseif value == 'live' %} + {% elseif value == '2' %} 直播 - {% elseif value == 'read' %} + {% elseif value == '3' %} 图文 {% endif %} {%- endmacro %} {%- macro level_info(value) %} - {% if value == 'entry' %} + {% if value == '1' %} 入门 - {% elseif value == 'junior' %} + {% elseif value == '2' %} 初级 - {% elseif value == 'medium' %} + {% elseif value == '3' %} 中级 - {% elseif value == 'senior' %} + {% elseif value == '4' %} 高级 {% endif %} {%- endmacro %} diff --git a/app/Http/Desktop/Views/macros/group.volt b/app/Http/Desktop/Views/macros/group.volt index 88ad63b9..f4ca289b 100644 --- a/app/Http/Desktop/Views/macros/group.volt +++ b/app/Http/Desktop/Views/macros/group.volt @@ -1,9 +1,9 @@ {%- macro type_info(value) %} - {% if value == 'course' %} + {% if value == '1' %} - {% elseif value == 'chat' %} + {% elseif value == '2' %} - {% elseif value == 'staff' %} + {% elseif value == '3' %} {% endif %} {%- endmacro %} \ No newline at end of file diff --git a/app/Http/Desktop/Views/macros/order.volt b/app/Http/Desktop/Views/macros/order.volt index fac79670..57dd015f 100644 --- a/app/Http/Desktop/Views/macros/order.volt +++ b/app/Http/Desktop/Views/macros/order.volt @@ -1,12 +1,12 @@ {%- macro item_info(order) %} - {% if order.item_type == 'course' %} + {% if order.item_type == '1' %} {% set course = order.item_info.course %}

课程名称:{{ course.title }}

市场价格:{{ '¥%0.2f'|format(course.market_price) }}会员价格:{{ '¥%0.2f'|format(course.vip_price) }}

学习期限:{{ date('Y-m-d',course.study_expiry_time) }}退款期限:{{ date('Y-m-d',course.refund_expiry_time) }}

- {% elseif order.item_type == 'package' %} + {% elseif order.item_type == '2' %} {% set courses = order.item_info.courses %} {% for course in courses %}
@@ -15,20 +15,20 @@

学习期限:{{ date('Y-m-d',course.study_expiry_time) }}退款期限:{{ date('Y-m-d',course.refund_expiry_time) }}

{% endfor %} - {% elseif order.item_type == 'vip' %} - {% set vip = order.item_info.vip %} -
-

商品名称:{{ order.subject }}

-

商品价格:{{ '¥%0.2f'|format(order.amount) }}

-
- {% elseif order.item_type == 'reward' %} + {% elseif order.item_type == '3' %} {% set course = order.item_info.course %} {% set reward = order.item_info.reward %}

课程名称:{{ course.title }}

赞赏金额:{{ '¥%0.2f'|format(reward.price) }}

- {% elseif order.item_type == 'test' %} + {% elseif order.item_type == '4' %} + {% set vip = order.item_info.vip %} +
+

商品名称:{{ order.subject }}

+

商品价格:{{ '¥%0.2f'|format(order.amount) }}

+
+ {% elseif order.item_type == '99' %}

商品名称:{{ order.subject }}

商品价格:{{ '¥%0.2f'|format(order.amount) }}

@@ -38,26 +38,30 @@ {%- macro status_history(items) %} {% for item in items %} - {% if item.status == 'pending' %} + {% if item.status == '1' %}

创建时间:{{ date('Y-m-d H:i:s',item.create_time) }}

- {% elseif item.status == 'finished' %} + {% elseif item.status == '2' %} +

支付时间:{{ date('Y-m-d H:i:s',item.create_time) }}

+ {% elseif item.status == '3' %}

完成时间:{{ date('Y-m-d H:i:s',item.create_time) }}

- {% elseif item.status == 'closed' %} + {% elseif item.status == '4' %}

关闭时间:{{ date('Y-m-d H:i:s',item.create_time) }}

- {% elseif item.status == 'refunded' %} + {% elseif item.status == '5' %}

退款时间:{{ date('Y-m-d H:i:s',item.create_time) }}

{% endif %} {% endfor %} {%- endmacro %} {%- macro order_status(value) %} - {% if value == 'pending' %} + {% if value == '1' %} 待支付 - {% elseif value == 'finished' %} + {% elseif value == '2' %} + 发货中 + {% elseif value == '3' %} 已完成 - {% elseif value == 'closed' %} + {% elseif value == '4' %} 已关闭 - {% elseif value == 'refunded' %} + {% elseif value == '5' %} 已退款 {% endif %} {%- endmacro %} diff --git a/app/Http/Desktop/Views/macros/refund.volt b/app/Http/Desktop/Views/macros/refund.volt index e55b53d0..091e697a 100644 --- a/app/Http/Desktop/Views/macros/refund.volt +++ b/app/Http/Desktop/Views/macros/refund.volt @@ -1,33 +1,33 @@ {%- macro status_history(items) %} {% for item in items %} - {% if item.status == 'pending' %} + {% if item.status == 1 %}

创建时间:{{ date('Y-m-d H:i:s',item.create_time) }}

- {% elseif item.status == 'canceled' %} + {% elseif item.status == 2 %}

取消时间:{{ date('Y-m-d H:i:s',item.create_time) }}

- {% elseif item.status == 'approved' %} + {% elseif item.status == 3 %}

审核时间:{{ date('Y-m-d H:i:s',item.create_time) }}

- {% elseif item.status == 'refused' %} + {% elseif item.status == 4 %}

拒绝时间:{{ date('Y-m-d H:i:s',item.create_time) }}

- {% elseif item.status == 'finished' %} + {% elseif item.status == 5 %}

完成时间:{{ date('Y-m-d H:i:s',item.create_time) }}

- {% elseif item.status == 'failed' %} + {% elseif item.status == 6 %}

失败时间:{{ date('Y-m-d H:i:s',item.create_time) }}

{% endif %} {% endfor %} {%- endmacro %} {%- macro refund_status(value) %} - {% if value == 'pending' %} + {% if value == 1 %} 待处理 - {% elseif value == 'canceled' %} + {% elseif value == 2 %} 已取消 - {% elseif value == 'approved' %} + {% elseif value == 3 %} 退款中 - {% elseif value == 'refused' %} + {% elseif value == 4 %} 已拒绝 - {% elseif value == 'finished' %} + {% elseif value == 5 %} 已完成 - {% elseif value == 'failed' %} + {% elseif value == 6 %} 已失败 {% endif %} {%- endmacro %} diff --git a/app/Http/Desktop/Views/my/orders.volt b/app/Http/Desktop/Views/my/orders.volt index 69746bdf..7f7a92f0 100644 --- a/app/Http/Desktop/Views/my/orders.volt +++ b/app/Http/Desktop/Views/my/orders.volt @@ -4,8 +4,8 @@ {{ partial('macros/order') }} - {% set status_types = {'all':'全部','pending':'待支付','finished':'已完成','closed':'已关闭','refunded':'已退款'} %} - {% set status = request.get('status','trim','all') %} + {% set status_types = {'0':'全部','1':'待支付','3':'已完成','4':'已关闭','5':'已退款'} %} + {% set status = request.get('status','trim','0') %}
{{ partial('my/menu') }}
@@ -14,7 +14,7 @@ 我的订单 {% for key,value in status_types %} {% set class = (status == key) ? 'layui-btn layui-btn-xs' : 'none' %} - {% set url = (key == 'all') ? url({'for':'desktop.my.orders'}) : url({'for':'desktop.my.orders'},{'status':key}) %} + {% set url = (key == '0') ? url({'for':'desktop.my.orders'}) : url({'for':'desktop.my.orders'},{'status':key}) %} {{ value }} {% endfor %}
diff --git a/app/Http/Desktop/Views/my/refunds.volt b/app/Http/Desktop/Views/my/refunds.volt index fe960bad..d61402df 100644 --- a/app/Http/Desktop/Views/my/refunds.volt +++ b/app/Http/Desktop/Views/my/refunds.volt @@ -4,8 +4,8 @@ {{ partial('macros/refund') }} - {% set status_types = {'all':'全部','pending':'待处理','canceled':'已取消','approved':'退款中','finished':'已完成'} %} - {% set status = request.get('status','trim','all') %} + {% set status_types = {'0':'全部','1':'待处理','2':'已取消','3':'退款中','5':'已完成'} %} + {% set status = request.get('status','int','0') %}
{{ partial('my/menu') }}
diff --git a/app/Http/Desktop/Views/vip/index.volt b/app/Http/Desktop/Views/vip/index.volt index fd4392c6..28772032 100644 --- a/app/Http/Desktop/Views/vip/index.volt +++ b/app/Http/Desktop/Views/vip/index.volt @@ -18,7 +18,7 @@
{% for option in vip_options %} - {% set order_url = url({'for':'desktop.order.confirm'},{'item_id':option.id,'item_type':'vip'}) %} + {% set order_url = url({'for':'desktop.order.confirm'},{'item_id':option.id,'item_type':4}) %}
{{ option.title }}
diff --git a/app/Listeners/Pay.php b/app/Listeners/Pay.php index 3d88a16d..d9b7d700 100644 --- a/app/Listeners/Pay.php +++ b/app/Listeners/Pay.php @@ -34,7 +34,7 @@ class Pay extends Listener $order = $orderRepo->findById($trade->order_id); - $order->status = OrderModel::STATUS_FINISHED; + $order->status = OrderModel::STATUS_SHIPPING; if ($order->update() === false) { throw new \RuntimeException('Update Order Status Failed'); diff --git a/app/Models/Chapter.php b/app/Models/Chapter.php index a08670d3..8f84140d 100644 --- a/app/Models/Chapter.php +++ b/app/Models/Chapter.php @@ -188,12 +188,12 @@ class Chapter extends Model { $this->create_time = time(); + $course = Course::findFirst($this->course_id); + + $this->model = $course->model; + if ($this->parent_id > 0) { - $course = Course::findFirst($this->course_id); - - $this->model = $course->model; - $attrs = []; switch ($course->model) { diff --git a/app/Models/Client.php b/app/Models/Client.php new file mode 100644 index 00000000..80e546a3 --- /dev/null +++ b/app/Models/Client.php @@ -0,0 +1,26 @@ + 'desktop', + self::TYPE_MOBILE => 'mobile', + self::TYPE_APP => 'app', + self::TYPE_MINI => 'mini', + ]; + } + +} \ No newline at end of file diff --git a/app/Models/Course.php b/app/Models/Course.php index dc51a1df..a8b1978f 100644 --- a/app/Models/Course.php +++ b/app/Models/Course.php @@ -13,17 +13,17 @@ class Course extends Model /** * 模型 */ - const MODEL_VOD = 'vod'; // 点播 - const MODEL_LIVE = 'live'; // 直播 - const MODEL_READ = 'read'; // 图文 + const MODEL_VOD = 1; // 点播 + const MODEL_LIVE = 2; // 直播 + const MODEL_READ = 3; // 图文 /** * 级别 */ - const LEVEL_ENTRY = 'entry'; // 入门 - const LEVEL_JUNIOR = 'junior'; // 初级 - const LEVEL_MEDIUM = 'medium'; // 中级 - const LEVEL_SENIOR = 'senior'; // 高级 + const LEVEL_ENTRY = 1; // 入门 + const LEVEL_JUNIOR = 2; // 初级 + const LEVEL_MEDIUM = 3; // 中级 + const LEVEL_SENIOR = 4; // 高级 /** * @var array diff --git a/app/Models/CourseUser.php b/app/Models/CourseUser.php index a925bc9c..a332cfcf 100644 --- a/app/Models/CourseUser.php +++ b/app/Models/CourseUser.php @@ -27,13 +27,6 @@ class CourseUser extends Model */ public $id; - /** - * 计划编号 - * - * @var int - */ - public $plan_id; - /** * 课程编号 * @@ -48,6 +41,13 @@ class CourseUser extends Model */ public $user_id; + /** + * 计划编号 + * + * @var int + */ + public $plan_id; + /** * 角色类型 * @@ -130,8 +130,9 @@ class CourseUser extends Model public function beforeCreate() { - $this->plan_id = (int)date('Ymd'); $this->create_time = time(); + + $this->plan_id = (int)date('Ymd'); } public function beforeUpdate() diff --git a/app/Models/ImGroup.php b/app/Models/ImGroup.php index ea090e4e..488e3329 100644 --- a/app/Models/ImGroup.php +++ b/app/Models/ImGroup.php @@ -12,9 +12,9 @@ class ImGroup extends Model /** * 群组类型 */ - const TYPE_COURSE = 'course'; // 课程 - const TYPE_CHAT = 'chat'; // 聊天 - const TYPE_STAFF = 'staff'; // 员工 + const TYPE_COURSE = 1; // 课程 + const TYPE_CHAT = 2; // 聊天 + const TYPE_STAFF = 3; // 员工 /** * 主键编号 diff --git a/app/Models/ImMessage.php b/app/Models/ImMessage.php index 4f959bc0..055abd86 100644 --- a/app/Models/ImMessage.php +++ b/app/Models/ImMessage.php @@ -122,7 +122,7 @@ class ImMessage extends Model sort($list); - return implode('_', $list); + return implode('-', $list); } } diff --git a/app/Models/Learning.php b/app/Models/Learning.php index 5652141e..ce6834a8 100644 --- a/app/Models/Learning.php +++ b/app/Models/Learning.php @@ -5,14 +5,6 @@ namespace App\Models; class Learning extends Model { - /** - * 客户端类型 - */ - const CLIENT_DESKTOP = 'desktop'; - const CLIENT_MOBILE = 'mobile'; - const CLIENT_APP = 'app'; - const CLIENT_MINI = 'mini'; - /** * 主键编号 * @@ -79,7 +71,7 @@ class Learning extends Model /** * 客户端类型 * - * @var string + * @var int */ public $client_type; diff --git a/app/Models/Order.php b/app/Models/Order.php index 6d01adaa..c9246584 100644 --- a/app/Models/Order.php +++ b/app/Models/Order.php @@ -10,27 +10,20 @@ class Order extends Model /** * 条目类型 */ - const ITEM_COURSE = 'course'; // 课程 - const ITEM_PACKAGE = 'package'; // 套餐 - const ITEM_REWARD = 'reward'; // 赞赏 - const ITEM_VIP = 'vip'; // 会员 - const ITEM_TEST = 'test'; // 测试 - - /** - * 终端类型 - */ - const CLIENT_DESKTOP = 'desktop'; // pc - const CLIENT_MOBILE = 'mobile'; // mobile - const CLIENT_APP = 'app'; // app - const CLIENT_MINI = 'mini'; // 小程序 + const ITEM_COURSE = 1; // 课程 + const ITEM_PACKAGE = 2; // 套餐 + const ITEM_REWARD = 3; // 赞赏 + const ITEM_VIP = 4; // 会员 + const ITEM_TEST = 99; // 测试 /** * 状态类型 */ - const STATUS_PENDING = 'pending'; // 待支付 - const STATUS_FINISHED = 'finished'; // 已完成 - const STATUS_CLOSED = 'closed'; // 已关闭 - const STATUS_REFUNDED = 'refunded'; // 已退款 + const STATUS_PENDING = 1; // 待支付 + const STATUS_SHIPPING = 2; // 发货中 + const STATUS_FINISHED = 3; // 已完成 + const STATUS_CLOSED = 4; // 已关闭 + const STATUS_REFUNDED = 5; // 已退款 /** * 主键编号 @@ -60,6 +53,20 @@ class Order extends Model */ public $amount; + /** + * 状态类型 + * + * @var string + */ + public $status; + + /** + * 删除标识 + * + * @var int + */ + public $deleted; + /** * 用户编号 * @@ -88,17 +95,10 @@ class Order extends Model */ public $item_info; - /** - * 优惠信息 - * - * @var string|array - */ - public $coupon_info; - /** * 终端类型 * - * @var string + * @var int */ public $client_type; @@ -109,20 +109,6 @@ class Order extends Model */ public $client_ip; - /** - * 状态类型 - * - * @var string - */ - public $status; - - /** - * 删除标识 - * - * @var int - */ - public $deleted; - /** * 创建时间 * @@ -158,11 +144,11 @@ class Order extends Model public function beforeCreate() { - $this->create_time = time(); + $this->sn = date('YmdHis') . rand(1000, 9999); $this->status = self::STATUS_PENDING; - $this->sn = date('YmdHis') . rand(1000, 9999); + $this->create_time = time(); if (is_array($this->item_info)) { $this->item_info = kg_json_encode($this->item_info); @@ -208,16 +194,6 @@ class Order extends Model ]; } - public static function clientTypes() - { - return [ - self::CLIENT_DESKTOP => 'desktop', - self::CLIENT_MOBILE => 'mobile', - self::CLIENT_APP => 'app', - self::CLIENT_MINI => 'mini', - ]; - } - public static function statusTypes() { return [ diff --git a/app/Models/Refund.php b/app/Models/Refund.php index 736ab10c..f37c0e44 100644 --- a/app/Models/Refund.php +++ b/app/Models/Refund.php @@ -10,12 +10,12 @@ class Refund extends Model /** * 状态类型 */ - const STATUS_PENDING = 'pending'; // 待处理 - const STATUS_CANCELED = 'canceled'; // 已取消 - const STATUS_APPROVED = 'approved'; // 已审核 - const STATUS_REFUSED = 'refused'; // 已拒绝 - const STATUS_FINISHED = 'finished'; // 已完成 - const STATUS_FAILED = 'failed'; // 已失败 + const STATUS_PENDING = 1; // 待处理 + const STATUS_CANCELED = 2; // 已取消 + const STATUS_APPROVED = 3; // 已审核 + const STATUS_REFUSED = 4; // 已拒绝 + const STATUS_FINISHED = 5; // 已完成 + const STATUS_FAILED = 6; // 已失败 /** * 主键编号 @@ -66,20 +66,6 @@ class Refund extends Model */ public $amount; - /** - * 申请备注 - * - * @var string - */ - public $apply_note; - - /** - * 审核备注 - * - * @var string - */ - public $review_note; - /** * 状态类型 * @@ -94,6 +80,20 @@ class Refund extends Model */ public $deleted; + /** + * 申请备注 + * + * @var string + */ + public $apply_note; + + /** + * 审核备注 + * + * @var string + */ + public $review_note; + /** * 创建时间 * @@ -129,16 +129,16 @@ class Refund extends Model public function beforeCreate() { + $this->sn = date('YmdHis') . rand(1000, 9999); + + $this->create_time = time(); + /** * 退款周期内无条件审批,状态为approved */ if (!$this->status) { $this->status = self::STATUS_PENDING; } - - $this->sn = date('YmdHis') . rand(1000, 9999); - - $this->create_time = time(); } public function beforeUpdate() diff --git a/app/Models/Task.php b/app/Models/Task.php index 71381a77..b7039d9c 100644 --- a/app/Models/Task.php +++ b/app/Models/Task.php @@ -8,8 +8,8 @@ class Task extends Model /** * 任务类型 */ - const TYPE_REFUND = 'refund'; // 退款 - const TYPE_ORDER = 'order'; // 下单 + const TYPE_ORDER = 1; // 下单 + const TYPE_REFUND = 2; // 退款 /** * 优先级 @@ -21,10 +21,10 @@ class Task extends Model /** * 状态类型 */ - const STATUS_PENDING = 'pending'; // 待定 - const STATUS_FINISHED = 'finished'; // 完成 - const STATUS_CANCELED = 'canceled'; // 取消 - const STATUS_FAILED = 'failed'; // 失败 + const STATUS_PENDING = 1; // 待定 + const STATUS_FINISHED = 2; // 完成 + const STATUS_CANCELED = 3; // 取消 + const STATUS_FAILED = 4; // 失败 /** * 主键编号 diff --git a/app/Models/Trade.php b/app/Models/Trade.php index 356dbb33..5134dba4 100644 --- a/app/Models/Trade.php +++ b/app/Models/Trade.php @@ -10,16 +10,16 @@ class Trade extends Model /** * 平台类型 */ - const CHANNEL_ALIPAY = 'alipay'; // 支付宝 - const CHANNEL_WXPAY = 'wxpay'; // 微信 + const CHANNEL_ALIPAY = 1; // 支付宝 + const CHANNEL_WXPAY = 2; // 微信 /** * 状态类型 */ - const STATUS_PENDING = 'pending'; // 待支付 - const STATUS_FINISHED = 'finished'; // 已完成 - const STATUS_CLOSED = 'closed'; // 已关闭 - const STATUS_REFUNDED = 'refunded'; // 已退款 + const STATUS_PENDING = 1; // 待支付 + const STATUS_FINISHED = 2; // 已完成 + const STATUS_CLOSED = 3; // 已关闭 + const STATUS_REFUNDED = 4; // 已退款 /** * 主键编号 diff --git a/app/Providers/FlashSession.php b/app/Providers/FlashSession.php new file mode 100644 index 00000000..a4ca87eb --- /dev/null +++ b/app/Providers/FlashSession.php @@ -0,0 +1,25 @@ +di->setShared($this->serviceName, function () { + + return new PhFlashSession([ + 'error' => 'alert alert-danger', + 'success' => 'alert alert-success', + 'notice' => 'alert alert-info', + 'warning' => 'alert alert-warning', + ]); + }); + } + +} \ No newline at end of file diff --git a/app/Providers/Url.php b/app/Providers/Url.php index 42b739d3..ff1e0a63 100644 --- a/app/Providers/Url.php +++ b/app/Providers/Url.php @@ -18,7 +18,6 @@ class Url extends Provider $url = new UrlResolver(); $url->setBaseUri($config->base_uri); - $url->setStaticBaseUri($config->static_base_uri); return $url; diff --git a/app/Repos/ImGroup.php b/app/Repos/ImGroup.php index 710fa86f..1f8b05b0 100644 --- a/app/Repos/ImGroup.php +++ b/app/Repos/ImGroup.php @@ -26,6 +26,10 @@ class ImGroup extends Repository $builder->andWhere('id = :id:', ['id' => $where['id']]); } + if (!empty($where['type'])) { + $builder->andWhere('type = :type:', ['type' => $where['type']]); + } + if (!empty($where['name'])) { $builder->andWhere('name LIKE :name:', ['name' => "%{$where['name']}%"]); } diff --git a/app/Services/Frontend/Account/Register.php b/app/Services/Frontend/Account/Register.php index 8c6c3d1e..45675bce 100644 --- a/app/Services/Frontend/Account/Register.php +++ b/app/Services/Frontend/Account/Register.php @@ -67,7 +67,7 @@ class Register extends FrontendService $imUser->name = $user->name; if ($imUser->create() === false) { - throw new \RuntimeException('Create ImUser Failed'); + throw new \RuntimeException('Create Im User Failed'); } $this->db->commit(); diff --git a/app/Services/Frontend/My/OrderList.php b/app/Services/Frontend/My/OrderList.php index 53d43136..04c2bf14 100644 --- a/app/Services/Frontend/My/OrderList.php +++ b/app/Services/Frontend/My/OrderList.php @@ -7,6 +7,7 @@ use App\Library\Paginator\Query as PagerQuery; use App\Repos\Order as OrderRepo; use App\Services\Frontend\Service as FrontendService; use App\Services\Frontend\UserTrait; +use App\Validators\Order as OrderValidator; class OrderList extends FrontendService { @@ -21,6 +22,12 @@ class OrderList extends FrontendService $params = $pagerQuery->getParams(); + $validator = new OrderValidator(); + + if (!empty($params['status'])) { + $params['status'] = $validator->checkStatus($params['status']); + } + $params['owner_id'] = $user->id; $params['deleted'] = 0; diff --git a/app/Services/Frontend/My/RefundList.php b/app/Services/Frontend/My/RefundList.php index 98c7ae40..30e4e2c4 100644 --- a/app/Services/Frontend/My/RefundList.php +++ b/app/Services/Frontend/My/RefundList.php @@ -7,6 +7,7 @@ use App\Library\Paginator\Query as PagerQuery; use App\Repos\Refund as RefundRepo; use App\Services\Frontend\Service as FrontendService; use App\Services\Frontend\UserTrait; +use App\Validators\Refund as RefundValidator; class RefundList extends FrontendService { @@ -21,6 +22,12 @@ class RefundList extends FrontendService $params = $pagerQuery->getParams(); + $validator = new RefundValidator(); + + if (!empty($params['status'])) { + $params['status'] = $validator->checkStatus($params['status']); + } + $params['owner_id'] = $user->id; $params['deleted'] = 0; diff --git a/app/Services/Frontend/Order/OrderCreate.php b/app/Services/Frontend/Order/OrderCreate.php index 52346338..d7762b79 100644 --- a/app/Services/Frontend/Order/OrderCreate.php +++ b/app/Services/Frontend/Order/OrderCreate.php @@ -11,12 +11,15 @@ use App\Models\Vip as VipModel; use App\Repos\Order as OrderRepo; use App\Repos\Package as PackageRepo; use App\Services\Frontend\Service as FrontendService; +use App\Traits\Client as ClientTrait; use App\Validators\Order as OrderValidator; use App\Validators\UserLimit as UserLimitValidator; class OrderCreate extends FrontendService { + use ClientTrait; + public function handle() { $post = $this->request->getPost(); @@ -91,6 +94,8 @@ class OrderCreate extends FrontendService $order->item_id = $course->id; $order->item_type = OrderModel::ITEM_COURSE; $order->item_info = $itemInfo; + $order->client_type = $this->getClientType(); + $order->client_ip = $this->getClientIp(); $order->amount = $amount; $order->subject = "课程 - {$course->title}"; @@ -127,6 +132,8 @@ class OrderCreate extends FrontendService $order->item_type = OrderModel::ITEM_PACKAGE; $order->item_info = $itemInfo; $order->amount = $amount; + $order->client_type = $this->getClientType(); + $order->client_ip = $this->getClientIp(); $order->subject = "套餐 - {$package->title}"; $order->create(); @@ -155,6 +162,8 @@ class OrderCreate extends FrontendService $order->item_id = $vip->id; $order->item_type = OrderModel::ITEM_VIP; $order->item_info = $itemInfo; + $order->client_type = $this->getClientType(); + $order->client_ip = $this->getClientIp(); $order->amount = $vip->price; $order->subject = "会员 - 会员服务({$vip->title})"; @@ -180,6 +189,8 @@ class OrderCreate extends FrontendService $order->item_id = "{$course->id}-{$reward->id}"; $order->item_type = OrderModel::ITEM_REWARD; $order->item_info = $itemInfo; + $order->client_type = $this->getClientType(); + $order->client_ip = $this->getClientIp(); $order->amount = $reward->price; $order->subject = "赞赏 - {$course->title}"; diff --git a/app/Traits/Client.php b/app/Traits/Client.php index 4bec3862..65660412 100644 --- a/app/Traits/Client.php +++ b/app/Traits/Client.php @@ -2,6 +2,7 @@ namespace App\Traits; +use App\Models\Client as ClientModel; use Phalcon\Di; use Phalcon\Http\Request; use WhichBrowser\Parser as BrowserParser; @@ -30,10 +31,10 @@ trait Client $result = new BrowserParser($userAgent); - $clientType = 'desktop'; + $clientType = ClientModel::TYPE_DESKTOP; if ($result->isMobile()) { - $clientType = 'mobile'; + $clientType = ClientModel::TYPE_MOBILE; } return $clientType; diff --git a/app/Validators/Course.php b/app/Validators/Course.php index 7bd25588..14424f78 100644 --- a/app/Validators/Course.php +++ b/app/Validators/Course.php @@ -21,14 +21,14 @@ class Course extends Validator { $id = intval($id); - $maxCourseIdCache = new MaxCourseIdCache(); + $maxCache = new MaxCourseIdCache(); - $maxCourseId = $maxCourseIdCache->get(); + $maxId = $maxCache->get(); /** * 防止缓存穿透 */ - if ($id < 1 || $id > $maxCourseId) { + if ($id < 1 || $id > $maxId) { throw new BadRequestException('course.not_found'); } @@ -60,7 +60,7 @@ class Course extends Validator { $list = CourseModel::modelTypes(); - if (!isset($list[$model])) { + if (!array_key_exists($model, $list)) { throw new BadRequestException('course.invalid_model'); } @@ -71,7 +71,7 @@ class Course extends Validator { $list = CourseModel::levelTypes(); - if (!isset($list[$level])) { + if (!array_key_exists($level, $list)) { throw new BadRequestException('course.invalid_level'); } diff --git a/app/Validators/Order.php b/app/Validators/Order.php index 0504728d..638d2cd1 100644 --- a/app/Validators/Order.php +++ b/app/Validators/Order.php @@ -119,6 +119,17 @@ class Order extends Validator return $value; } + public function checkStatus($status) + { + $list = OrderModel::statusTypes(); + + if (!array_key_exists($status, $list)) { + throw new BadRequestException('order.invalid_status'); + } + + return $status; + } + public function checkIfAllowCancel(OrderModel $order) { if ($order->status != OrderModel::STATUS_PENDING) { diff --git a/app/Validators/Refund.php b/app/Validators/Refund.php index 9f21f5d1..70cf91b5 100644 --- a/app/Validators/Refund.php +++ b/app/Validators/Refund.php @@ -40,6 +40,24 @@ class Refund extends Validator return $refund; } + public function checkAmount($orderAmount, $refundAmount) + { + if ($refundAmount > $orderAmount) { + throw new BadRequestException('refund.invalid_amount'); + } + } + + public function checkStatus($status) + { + $list = RefundModel::statusTypes(); + + if (!array_key_exists($status, $list)) { + throw new BadRequestException('refund.invalid_status'); + } + + return $status; + } + public function checkReviewStatus($status) { $list = [ @@ -48,19 +66,12 @@ class Refund extends Validator ]; if (!in_array($status, $list)) { - throw new BadRequestException('refund.invalid_review_status'); + throw new BadRequestException('refund.invalid_status'); } return $status; } - public function checkAmount($orderAmount, $refundAmount) - { - if ($refundAmount > $orderAmount) { - throw new BadRequestException('refund.invalid_amount'); - } - } - public function checkApplyNote($note) { $value = $this->filter->sanitize($note, ['trim', 'string']); diff --git a/app/Validators/Trade.php b/app/Validators/Trade.php index e497cb25..460cfc51 100644 --- a/app/Validators/Trade.php +++ b/app/Validators/Trade.php @@ -45,13 +45,24 @@ class Trade extends Validator { $list = TradeModel::channelTypes(); - if (!isset($list[$channel])) { + if (!array_key_exists($channel, $list)) { throw new BadRequestException('trade.invalid_channel'); } return $channel; } + public function checkStatus($status) + { + $list = TradeModel::statusTypes(); + + if (!array_key_exists($status, $list)) { + throw new BadRequestException('trade.invalid_status'); + } + + return $status; + } + public function checkIfAllowClose(TradeModel $trade) { if ($trade->status != TradeModel::STATUS_PENDING) { diff --git a/bootstrap/ConsoleKernel.php b/bootstrap/ConsoleKernel.php index 57e9354c..455afd28 100644 --- a/bootstrap/ConsoleKernel.php +++ b/bootstrap/ConsoleKernel.php @@ -91,6 +91,7 @@ class ConsoleKernel extends Kernel ]; foreach ($providers as $provider) { + /** * @var AppProvider $service */ diff --git a/bootstrap/HttpKernel.php b/bootstrap/HttpKernel.php index 3bf7b7b0..d2e0cbbf 100644 --- a/bootstrap/HttpKernel.php +++ b/bootstrap/HttpKernel.php @@ -10,6 +10,7 @@ use App\Providers\Crypt as CryptProvider; use App\Providers\CsrfToken as CsrfTokenProvider; use App\Providers\Database as DatabaseProvider; use App\Providers\EventsManager as EventsManagerProvider; +use App\Providers\FlashSession as FlashSessionProvider; use App\Providers\Logger as LoggerProvider; use App\Providers\MetaData as MetaDataProvider; use App\Providers\Provider as AppProvider; @@ -74,6 +75,7 @@ class HttpKernel extends Kernel CsrfTokenProvider::class, DatabaseProvider::class, EventsManagerProvider::class, + FlashSessionProvider::class, LoggerProvider::class, MetaDataProvider::class, RequestProvider::class, @@ -86,6 +88,7 @@ class HttpKernel extends Kernel ]; foreach ($providers as $provider) { + /** * @var AppProvider $service */ diff --git a/config/errors.php b/config/errors.php index 41f58b97..03e8ec32 100644 --- a/config/errors.php +++ b/config/errors.php @@ -256,6 +256,7 @@ $error['carousel.invalid_publish_status'] = '无效的发布状态'; * 订单相关 */ $error['order.not_found'] = '订单不存在'; +$error['order.invalid_status'] = '无效的状态类型'; $error['order.item_not_found'] = '商品不存在'; $error['order.trade_expired'] = '交易已过期'; $error['order.has_bought_course'] = '已经购买过该课程'; @@ -271,6 +272,7 @@ $error['order.refund_apply_existed'] = '退款申请已经存在'; $error['trade.not_found'] = '交易不存在'; $error['trade.create_failed'] = '创建交易失败'; $error['trade.invalid_channel'] = '无效的平台类型'; +$error['trade.invalid_status'] = '无效的状态类型'; $error['trade.close_not_allowed'] = '当前不允许关闭交易'; $error['trade.refund_not_allowed'] = '当前不允许交易退款'; $error['trade.refund_apply_existed'] = '退款申请已经存在,请等待处理结果'; @@ -285,7 +287,7 @@ $error['refund.review_note_too_short'] = '审核备注太短(少于2个字符 $error['refund.review_note_too_long'] = '审核备注太长(多于255个字符)'; $error['refund.cancel_not_allowed'] = '当前不允许取消退款'; $error['refund.review_not_allowed'] = '当前不允许审核退款'; -$error['refund.invalid_review_status'] = '无效的审核状态'; +$error['refund.invalid_status'] = '无效的状态类型'; /** * 角色相关 diff --git a/config/xs.group.ini b/config/xs.group.ini deleted file mode 100644 index 1b746974..00000000 --- a/config/xs.group.ini +++ /dev/null @@ -1,28 +0,0 @@ -project.name = group -project.default_charset = UTF-8 - -server.index = 8383 -server.search = 8384 - -[id] -type = id - -[type] -type = string -index = self -tokenizer = full - -[name] -type = title - -[avatar] -type = string - -[about] -type = body - -[owner] -type = string - -[user_count] -type = string diff --git a/config/xs.user.ini b/config/xs.user.ini deleted file mode 100644 index dd7c2157..00000000 --- a/config/xs.user.ini +++ /dev/null @@ -1,32 +0,0 @@ -project.name = user -project.default_charset = UTF-8 - -server.index = 8383 -server.search = 8384 - -[id] -type = id - -[name] -type = title - -[avatar] -type = string - -[title] -type = string - -[about] -type = body - -[location] -type = string -index = self - -[gender] -type = string -index = self -tokenizer = full - -[vip] -type = string \ No newline at end of file