mirror of
https://gitee.com/koogua/course-tencent-cloud.git
synced 2025-07-02 07:04:56 +08:00
功能优化
This commit is contained in:
parent
87097afad3
commit
0155e55e4b
@ -8,6 +8,7 @@
|
||||
- 优化账户创建数据流
|
||||
- 优化课程创建数据流
|
||||
- 优化章节创建数据流
|
||||
- 优化积分商品兑换
|
||||
- 优化发货逻辑
|
||||
|
||||
### [v1.4.9](https://gitee.com/koogua/course-tencent-cloud/releases/v1.4.9)(2022-01-01)
|
||||
|
@ -35,7 +35,7 @@ class SiteTodayStat extends Cache
|
||||
$saleAmount = $statRepo->sumDailySales($date);
|
||||
$refundAmount = $statRepo->sumDailyRefunds($date);
|
||||
$registerCount = $statRepo->countDailyRegisteredUsers($date);
|
||||
$pointRedeemCount = $statRepo->countDailyPointRedeems($date);
|
||||
$pointRedeemCount = $statRepo->countDailyPointGiftRedeems($date);
|
||||
|
||||
return [
|
||||
'sale_count' => $saleCount,
|
||||
|
@ -10,15 +10,15 @@ namespace App\Console\Tasks;
|
||||
use App\Models\CourseUser as CourseUserModel;
|
||||
use App\Models\ImGroupUser as ImGroupUserModel;
|
||||
use App\Models\PointGift as PointGiftModel;
|
||||
use App\Models\PointRedeem as PointRedeemModel;
|
||||
use App\Models\PointGiftRedeem as PointGiftRedeemModel;
|
||||
use App\Models\Task as TaskModel;
|
||||
use App\Repos\Course as CourseRepo;
|
||||
use App\Repos\CourseUser as CourseUserRepo;
|
||||
use App\Repos\ImGroup as ImGroupRepo;
|
||||
use App\Repos\ImGroupUser as ImGroupUserRepo;
|
||||
use App\Repos\PointGift as PointGiftRepo;
|
||||
use App\Repos\PointRedeem as PointRedeemRepo;
|
||||
use App\Services\Logic\Notice\DingTalk\PointRedeem as PointRedeemNotice;
|
||||
use App\Repos\PointGiftRedeem as PointGiftRedeemRepo;
|
||||
use App\Services\Logic\Notice\DingTalk\PointGiftRedeem as PointGiftRedeemNotice;
|
||||
use App\Services\Logic\Point\History\PointRefund as PointRefundPointHistory;
|
||||
use Phalcon\Mvc\Model\Resultset;
|
||||
use Phalcon\Mvc\Model\ResultsetInterface;
|
||||
@ -38,13 +38,11 @@ class PointGiftDeliverTask extends Task
|
||||
|
||||
echo '------ start deliver task ------' . PHP_EOL;
|
||||
|
||||
$redeemRepo = new PointRedeemRepo();
|
||||
$redeemRepo = new PointGiftRedeemRepo();
|
||||
|
||||
foreach ($tasks as $task) {
|
||||
|
||||
$redeemId = $task->item_info['point_redeem']['id'] ?? 0;
|
||||
|
||||
$redeem = $redeemRepo->findById($redeemId);
|
||||
$redeem = $redeemRepo->findById($task->item_id);
|
||||
|
||||
if (!$redeem) {
|
||||
$task->status = TaskModel::STATUS_FAILED;
|
||||
@ -102,7 +100,7 @@ class PointGiftDeliverTask extends Task
|
||||
echo '------ end deliver task ------' . PHP_EOL;
|
||||
}
|
||||
|
||||
protected function handleCourseRedeem(PointRedeemModel $redeem)
|
||||
protected function handleCourseRedeem(PointGiftRedeemModel $redeem)
|
||||
{
|
||||
$giftRepo = new PointGiftRepo();
|
||||
|
||||
@ -163,21 +161,21 @@ class PointGiftDeliverTask extends Task
|
||||
}
|
||||
}
|
||||
|
||||
$redeem->status = PointRedeemModel::STATUS_FINISHED;
|
||||
$redeem->status = PointGiftRedeemModel::STATUS_FINISHED;
|
||||
|
||||
if ($redeem->update() === false) {
|
||||
throw new \RuntimeException('Update Redeem Status Failed');
|
||||
}
|
||||
}
|
||||
|
||||
protected function handleGoodsRedeem(PointRedeemModel $redeem)
|
||||
protected function handleGoodsRedeem(PointGiftRedeemModel $redeem)
|
||||
{
|
||||
$notice = new PointRedeemNotice();
|
||||
$notice = new PointGiftRedeemNotice();
|
||||
|
||||
$notice->createTask($redeem);
|
||||
}
|
||||
|
||||
protected function handlePointRefund(PointRedeemModel $redeem)
|
||||
protected function handlePointRefund(PointGiftRedeemModel $redeem)
|
||||
{
|
||||
$service = new PointRefundPointHistory();
|
||||
|
||||
|
@ -25,8 +25,6 @@ class ImGroupController extends Controller
|
||||
$group = $service->getGroup($id);
|
||||
$pager = $service->getGroupUsers($id);
|
||||
|
||||
$this->view->pick('im/group/users');
|
||||
|
||||
$this->view->setVar('group', $group);
|
||||
$this->view->setVar('pager', $pager);
|
||||
}
|
||||
@ -40,8 +38,6 @@ class ImGroupController extends Controller
|
||||
|
||||
$pager = $groupService->getGroups();
|
||||
|
||||
$this->view->pick('im/group/list');
|
||||
|
||||
$this->view->setVar('pager', $pager);
|
||||
}
|
||||
|
||||
@ -54,8 +50,6 @@ class ImGroupController extends Controller
|
||||
|
||||
$types = $groupService->getGroupTypes();
|
||||
|
||||
$this->view->pick('im/group/search');
|
||||
|
||||
$this->view->setVar('types', $types);
|
||||
}
|
||||
|
||||
@ -64,7 +58,7 @@ class ImGroupController extends Controller
|
||||
*/
|
||||
public function addAction()
|
||||
{
|
||||
$this->view->pick('im/group/add');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@ -76,8 +70,6 @@ class ImGroupController extends Controller
|
||||
|
||||
$group = $groupService->getGroup($id);
|
||||
|
||||
$this->view->pick('im/group/edit');
|
||||
|
||||
$this->view->setVar('group', $group);
|
||||
}
|
||||
|
||||
|
@ -24,8 +24,6 @@ class PointGiftController extends Controller
|
||||
|
||||
$pager = $service->getPointGifts();
|
||||
|
||||
$this->view->pick('point/gift/list');
|
||||
|
||||
$this->view->setVar('pager', $pager);
|
||||
}
|
||||
|
||||
@ -38,8 +36,6 @@ class PointGiftController extends Controller
|
||||
|
||||
$types = $service->getTypes();
|
||||
|
||||
$this->view->pick('point/gift/search');
|
||||
|
||||
$this->view->setVar('types', $types);
|
||||
}
|
||||
|
||||
@ -53,8 +49,6 @@ class PointGiftController extends Controller
|
||||
$xmCourses = $service->getXmCourses();
|
||||
$types = $service->getTypes();
|
||||
|
||||
$this->view->pick('point/gift/add');
|
||||
|
||||
$this->view->setVar('xm_courses', $xmCourses);
|
||||
$this->view->setVar('types', $types);
|
||||
}
|
||||
@ -68,8 +62,6 @@ class PointGiftController extends Controller
|
||||
|
||||
$gift = $service->getPointGift($id);
|
||||
|
||||
$this->view->pick('point/gift/edit');
|
||||
|
||||
$this->view->setVar('gift', $gift);
|
||||
}
|
||||
|
||||
|
@ -7,42 +7,40 @@
|
||||
|
||||
namespace App\Http\Admin\Controllers;
|
||||
|
||||
use App\Http\Admin\Services\PointRedeem as PointRedeemService;
|
||||
use App\Http\Admin\Services\PointGiftRedeem as PointGiftRedeemService;
|
||||
|
||||
/**
|
||||
* @RoutePrefix("/admin/point/redeem")
|
||||
* @RoutePrefix("/admin/point/gift/redeem")
|
||||
*/
|
||||
class PointRedeemController extends Controller
|
||||
class PointGiftRedeemController extends Controller
|
||||
{
|
||||
|
||||
/**
|
||||
* @Get("/search", name="admin.point_redeem.search")
|
||||
* @Get("/search", name="admin.point_gift_redeem.search")
|
||||
*/
|
||||
public function searchAction()
|
||||
{
|
||||
$this->view->pick('point/redeem/search');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @Get("/list", name="admin.point_redeem.list")
|
||||
* @Get("/list", name="admin.point_gift_redeem.list")
|
||||
*/
|
||||
public function listAction()
|
||||
{
|
||||
$redeemService = new PointRedeemService();
|
||||
$redeemService = new PointGiftRedeemService();
|
||||
|
||||
$pager = $redeemService->getRedeems();
|
||||
|
||||
$this->view->pick('point/redeem/list');
|
||||
|
||||
$this->view->setVar('pager', $pager);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Post("/{id:[0-9]+}/deliver", name="admin.point_redeem.deliver")
|
||||
* @Post("/{id:[0-9]+}/deliver", name="admin.point_gift_redeem.deliver")
|
||||
*/
|
||||
public function deliverAction($id)
|
||||
{
|
||||
$redeemService = new PointRedeemService();
|
||||
$redeemService = new PointGiftRedeemService();
|
||||
|
||||
$redeemService->deliver($id);
|
||||
|
@ -24,7 +24,6 @@ class PointHistoryController extends Controller
|
||||
|
||||
$eventTypes = $historyService->getEventTypes();
|
||||
|
||||
$this->view->pick('point/history/search');
|
||||
$this->view->setVar('event_types', $eventTypes);
|
||||
}
|
||||
|
||||
@ -37,8 +36,6 @@ class PointHistoryController extends Controller
|
||||
|
||||
$pager = $historyService->getHistories();
|
||||
|
||||
$this->view->pick('point/history/list');
|
||||
|
||||
$this->view->setVar('pager', $pager);
|
||||
}
|
||||
|
||||
|
@ -871,7 +871,7 @@ class AuthNode extends Service
|
||||
'id' => '2-20-2',
|
||||
'title' => '兑换记录',
|
||||
'type' => 'button',
|
||||
'route' => 'admin.point_redeem.list',
|
||||
'route' => 'admin.point_gift_redeem.list',
|
||||
],
|
||||
[
|
||||
'id' => '2-20-3',
|
||||
|
@ -9,12 +9,12 @@ namespace App\Http\Admin\Services;
|
||||
|
||||
use App\Library\Paginator\Query as PagerQuery;
|
||||
use App\Models\PointGift as PointGiftModel;
|
||||
use App\Models\PointRedeem as PointRedeemModel;
|
||||
use App\Repos\PointRedeem as PointRedeemRepo;
|
||||
use App\Models\PointGiftRedeem as PointGiftRedeemModel;
|
||||
use App\Repos\PointGiftRedeem as PointGiftRedeemRepo;
|
||||
use App\Services\Logic\Notice\PointGoodsDeliver as PointGoodsDeliverNotice;
|
||||
use App\Validators\PointRedeem as PointRedeemValidator;
|
||||
use App\Validators\PointGiftRedeem as PointGiftRedeemValidator;
|
||||
|
||||
class PointRedeem extends Service
|
||||
class PointGiftRedeem extends Service
|
||||
{
|
||||
|
||||
public function getRedeems()
|
||||
@ -27,7 +27,7 @@ class PointRedeem extends Service
|
||||
$page = $pagerQuery->getPage();
|
||||
$limit = $pagerQuery->getLimit();
|
||||
|
||||
$redeemRepo = new PointRedeemRepo();
|
||||
$redeemRepo = new PointGiftRedeemRepo();
|
||||
|
||||
return $redeemRepo->paginate($params, $sort, $page, $limit);
|
||||
}
|
||||
@ -45,7 +45,7 @@ class PointRedeem extends Service
|
||||
return $redeem;
|
||||
}
|
||||
|
||||
$redeem->status = PointRedeemModel::STATUS_FINISHED;
|
||||
$redeem->status = PointGiftRedeemModel::STATUS_FINISHED;
|
||||
|
||||
$redeem->update();
|
||||
|
||||
@ -54,7 +54,7 @@ class PointRedeem extends Service
|
||||
return $redeem;
|
||||
}
|
||||
|
||||
protected function handleGoodsDeliverNotice(PointRedeemModel $redeem)
|
||||
protected function handleGoodsDeliverNotice(PointGiftRedeemModel $redeem)
|
||||
{
|
||||
$notice = new PointGoodsDeliverNotice();
|
||||
|
||||
@ -63,7 +63,7 @@ class PointRedeem extends Service
|
||||
|
||||
protected function findOrFail($id)
|
||||
{
|
||||
$validator = new PointRedeemValidator();
|
||||
$validator = new PointGiftRedeemValidator();
|
||||
|
||||
return $validator->checkRedeem($id);
|
||||
}
|
@ -77,10 +77,10 @@
|
||||
{% if item.teacher.id is defined %}
|
||||
<span>讲师:{{ item.teacher.name }}</span>
|
||||
{% endif %}
|
||||
<span>难度:{{ level_info(item.level) }}</span>
|
||||
<span>难度:{{ level_type(item.level) }}</span>
|
||||
</p>
|
||||
<p class="meta">
|
||||
<span>类型:{{ model_info(item.model) }}</span>
|
||||
<span>类型:{{ model_type(item.model) }}</span>
|
||||
<span>评分:{{ item.rating }}</span>
|
||||
<span>创建:{{ date('Y-m-d',item.create_time) }}</span>
|
||||
</p>
|
||||
|
@ -1,4 +1,4 @@
|
||||
{%- macro model_info(value) %}
|
||||
{%- macro model_type(value) %}
|
||||
{% if value == 1 %}
|
||||
点播
|
||||
{% elseif value == 2 %}
|
||||
@ -12,7 +12,7 @@
|
||||
{% endif %}
|
||||
{%- endmacro %}
|
||||
|
||||
{%- macro level_info(value) %}
|
||||
{%- macro level_type(value) %}
|
||||
{% if value == 1 %}
|
||||
入门
|
||||
{% elseif value == 2 %}
|
||||
|
19
app/Http/Admin/Views/macros/point_gift.volt
Normal file
19
app/Http/Admin/Views/macros/point_gift.volt
Normal file
@ -0,0 +1,19 @@
|
||||
{%- macro gift_type_info(value) %}
|
||||
{% if value == 1 %}
|
||||
课程
|
||||
{% elseif value == 2 %}
|
||||
商品
|
||||
{% elseif value == 3 %}
|
||||
现金
|
||||
{% endif %}
|
||||
{%- endmacro %}
|
||||
|
||||
{%- macro redeem_status_info(value) %}
|
||||
{% if value == 1 %}
|
||||
处理中
|
||||
{% elseif value == 2 %}
|
||||
已完成
|
||||
{% elseif value == 3 %}
|
||||
已失败
|
||||
{% endif %}
|
||||
{%- endmacro %}
|
@ -1,23 +1,3 @@
|
||||
{%- macro redeem_status_info(value) %}
|
||||
{% if value == 1 %}
|
||||
处理中
|
||||
{% elseif value == 2 %}
|
||||
已完成
|
||||
{% elseif value == 3 %}
|
||||
已失败
|
||||
{% endif %}
|
||||
{%- endmacro %}
|
||||
|
||||
{%- macro gift_type_info(value) %}
|
||||
{% if value == 1 %}
|
||||
课程
|
||||
{% elseif value == 2 %}
|
||||
商品
|
||||
{% elseif value == 3 %}
|
||||
现金
|
||||
{% endif %}
|
||||
{%- endmacro %}
|
||||
|
||||
{%- macro event_point_info(value) %}
|
||||
{% if value > 0 %}
|
||||
<span class="layui-badge layui-bg-green">+{{ value }}</span>
|
||||
@ -51,9 +31,9 @@
|
||||
{% if history.event_type == 1 %}
|
||||
<p class="order">{{ event_info.order.subject }}</p>
|
||||
{% elseif history.event_type == 2 %}
|
||||
<p class="gift">{{ event_info.point_redeem.gift_name }}</p>
|
||||
<p class="gift">{{ event_info.point_gift_redeem.gift_name }}</p>
|
||||
{% elseif history.event_type == 3 %}
|
||||
<span class="none">{{ event_info.point_redeem.gift_name }}</span>
|
||||
<span class="none">{{ event_info.point_gift_redeem.gift_name }}</span>
|
||||
{% elseif history.event_type == 4 %}
|
||||
<span class="none">N/A</span>
|
||||
{% elseif history.event_type == 5 %}
|
@ -5,9 +5,9 @@
|
||||
{% set update_url = url({'for':'admin.point_gift.update','id':gift.id}) %}
|
||||
|
||||
{% if gift.type == 1 %}
|
||||
{{ partial('point/gift/edit_course') }}
|
||||
{{ partial('point_gift/edit_course') }}
|
||||
{% elseif gift.type == 2 %}
|
||||
{{ partial('point/gift/edit_goods') }}
|
||||
{{ partial('point_gift/edit_goods') }}
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
@ -2,8 +2,9 @@
|
||||
|
||||
{% block content %}
|
||||
|
||||
{{ partial('macros/point') }}
|
||||
{{ partial('macros/point_gift') }}
|
||||
|
||||
{% set redeem_url = url({'for':'admin.point_gift_redeem.list'}) %}
|
||||
{% set add_url = url({'for':'admin.point_gift.add'}) %}
|
||||
{% set search_url = url({'for':'admin.point_gift.search'}) %}
|
||||
|
||||
@ -14,6 +15,9 @@
|
||||
</span>
|
||||
</div>
|
||||
<div class="kg-nav-right">
|
||||
<a class="layui-btn layui-btn-sm" href="{{ redeem_url }}">
|
||||
<i class="layui-icon layui-icon-log"></i>兑换记录
|
||||
</a>
|
||||
<a class="layui-btn layui-btn-sm" href="{{ add_url }}">
|
||||
<i class="layui-icon layui-icon-add-1"></i>添加礼品
|
||||
</a>
|
||||
@ -50,7 +54,7 @@
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for item in pager.items %}
|
||||
{% set redeem_url = url({'for':'admin.point_redeem.list'},{'gift_id':item.id}) %}
|
||||
{% set redeem_url = url({'for':'admin.point_gift_redeem.list'},{'gift_id':item.id}) %}
|
||||
{% set gift_url = url({'for':'home.point_gift.show','id':item.id}) %}
|
||||
{% set edit_url = url({'for':'admin.point_gift.edit','id':item.id}) %}
|
||||
{% set update_url = url({'for':'admin.point_gift.update','id':item.id}) %}
|
@ -2,9 +2,9 @@
|
||||
|
||||
{% block content %}
|
||||
|
||||
{{ partial('macros/point') }}
|
||||
{{ partial('macros/point_gift') }}
|
||||
|
||||
{% set search_url = url({'for':'admin.point_redeem.search'}) %}
|
||||
{% set search_url = url({'for':'admin.point_gift_redeem.search'}) %}
|
||||
|
||||
<div class="kg-nav">
|
||||
<div class="kg-nav-left">
|
||||
@ -40,8 +40,8 @@
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for item in pager.items %}
|
||||
{% set user_filter_url = url({'for':'admin.point_redeem.list'},{'user_id':item.user_id}) %}
|
||||
{% set deliver_url = url({'for':'admin.point_redeem.deliver','id':item.id}) %}
|
||||
{% set user_filter_url = url({'for':'admin.point_gift_redeem.list'},{'user_id':item.user_id}) %}
|
||||
{% set deliver_url = url({'for':'admin.point_gift_redeem.deliver','id':item.id}) %}
|
||||
{% set gift_url = url({'for':'home.point_gift.show','id':item.gift_id}) %}
|
||||
<tr>
|
||||
<td>
|
@ -2,7 +2,7 @@
|
||||
|
||||
{% block content %}
|
||||
|
||||
<form class="layui-form kg-form" method="GET" action="{{ url({'for':'admin.point_redeem.list'}) }}">
|
||||
<form class="layui-form kg-form" method="GET" action="{{ url({'for':'admin.point_gift_redeem.list'}) }}">
|
||||
<fieldset class="layui-elem-field layui-field-title">
|
||||
<legend>搜索兑换</legend>
|
||||
</fieldset>
|
@ -9,8 +9,8 @@ namespace App\Http\Home\Controllers;
|
||||
|
||||
use App\Services\Logic\Point\GiftInfo as GiftInfoService;
|
||||
use App\Services\Logic\Point\GiftList as GiftListService;
|
||||
use App\Services\Logic\Point\GiftRedeem as GiftRedeemService;
|
||||
use App\Services\Logic\Point\HotGiftList as HotGiftListService;
|
||||
use App\Services\Logic\Point\PointRedeem as GiftRedeemService;
|
||||
use App\Services\Logic\User\Console\BalanceInfo as BalanceInfoService;
|
||||
use Phalcon\Mvc\Dispatcher;
|
||||
use Phalcon\Mvc\View;
|
||||
@ -39,8 +39,6 @@ class PointGiftController extends Controller
|
||||
public function listAction()
|
||||
{
|
||||
$this->seo->prependTitle('积分兑换');
|
||||
|
||||
$this->view->pick('point/gift/list');
|
||||
}
|
||||
|
||||
/**
|
||||
@ -55,7 +53,6 @@ class PointGiftController extends Controller
|
||||
$pager->target = 'gift-list';
|
||||
|
||||
$this->view->setRenderLevel(View::LEVEL_ACTION_VIEW);
|
||||
$this->view->pick('point/gift/pager');
|
||||
$this->view->setVar('pager', $pager);
|
||||
}
|
||||
|
||||
@ -81,20 +78,19 @@ class PointGiftController extends Controller
|
||||
|
||||
$this->seo->prependTitle(['积分兑换', $gift['name']]);
|
||||
|
||||
$this->view->pick('point/gift/show');
|
||||
$this->view->setVar('gift', $gift);
|
||||
$this->view->setVar('hot_gifts', $hotGifts);
|
||||
$this->view->setVar('user_balance', $userBalance);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Post("/redeem", name="home.point_gift.redeem")
|
||||
* @Post("/{id:[0-9]+}/redeem", name="home.point_gift.redeem")
|
||||
*/
|
||||
public function redeemAction()
|
||||
public function redeemAction($id)
|
||||
{
|
||||
$service = new GiftRedeemService();
|
||||
|
||||
$service->handle();
|
||||
$service->handle($id);
|
||||
|
||||
return $this->jsonSuccess(['msg' => '兑换成功']);
|
||||
}
|
||||
|
@ -1,30 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2021 深圳市酷瓜软件有限公司
|
||||
* @license https://opensource.org/licenses/GPL-2.0
|
||||
* @link https://www.koogua.com
|
||||
*/
|
||||
|
||||
namespace App\Http\Home\Controllers;
|
||||
|
||||
use App\Services\Logic\Point\PointRedeem as PointRedeemService;
|
||||
|
||||
/**
|
||||
* @RoutePrefix("/point/redeem")
|
||||
*/
|
||||
class PointRedeemController extends Controller
|
||||
{
|
||||
|
||||
/**
|
||||
* @Post("/create", name="home.point_redeem.create")
|
||||
*/
|
||||
public function createAction()
|
||||
{
|
||||
$service = new PointRedeemService();
|
||||
|
||||
$service->handle();
|
||||
|
||||
return $this->jsonSuccess(['msg' => '兑换请求提交成功']);
|
||||
}
|
||||
|
||||
}
|
@ -26,8 +26,8 @@ use App\Services\Logic\User\Console\NotificationRead as NotificationReadService;
|
||||
use App\Services\Logic\User\Console\NotifyStats as NotifyStatsService;
|
||||
use App\Services\Logic\User\Console\Online as OnlineService;
|
||||
use App\Services\Logic\User\Console\OrderList as OrderListService;
|
||||
use App\Services\Logic\User\Console\PointGiftRedeemList as PointGiftRedeemListService;
|
||||
use App\Services\Logic\User\Console\PointHistory as PointHistoryService;
|
||||
use App\Services\Logic\User\Console\PointRedeemList as PointRedeemListService;
|
||||
use App\Services\Logic\User\Console\ProfileInfo as ProfileInfoService;
|
||||
use App\Services\Logic\User\Console\ProfileUpdate as ProfileUpdateService;
|
||||
use App\Services\Logic\User\Console\QuestionList as QuestionListService;
|
||||
@ -266,15 +266,15 @@ class UserConsoleController extends Controller
|
||||
}
|
||||
|
||||
/**
|
||||
* @Get("/point/redeems", name="home.uc.point_redeems")
|
||||
* @Get("/point/gift/redeems", name="home.uc.point_gift_redeems")
|
||||
*/
|
||||
public function pointRedeemsAction()
|
||||
public function pointGiftRedeemsAction()
|
||||
{
|
||||
$service = new PointRedeemListService();
|
||||
$service = new PointGiftRedeemListService();
|
||||
|
||||
$pager = $service->handle();
|
||||
|
||||
$this->view->pick('user/console/point_redeems');
|
||||
$this->view->pick('user/console/point_gift_redeems');
|
||||
$this->view->setVar('pager', $pager);
|
||||
}
|
||||
|
||||
|
@ -85,7 +85,7 @@
|
||||
{%- macro meta_stats_info(course) %}
|
||||
<p class="item">
|
||||
<span class="key">难度级别</span>
|
||||
<span class="value">{{ level_info(course.level) }}</span>
|
||||
<span class="value">{{ level_type(course.level) }}</span>
|
||||
<span class="key">学习人次</span>
|
||||
<span class="value">{{ course.user_count }}</span>
|
||||
<span class="key">综合评分</span>
|
||||
@ -95,6 +95,7 @@
|
||||
|
||||
<div class="course-meta wrap clearfix">
|
||||
<div class="cover">
|
||||
<span class="model layui-badge layui-bg-green">{{ model_type(course.model) }}</span>
|
||||
<img src="{{ course.cover }}!cover_270" alt="{{ course.title }}">
|
||||
</div>
|
||||
<div class="info">
|
||||
|
@ -1,4 +1,4 @@
|
||||
{%- macro model_info(value) %}
|
||||
{%- macro model_type(value) %}
|
||||
{% if value == 1 %}
|
||||
点播
|
||||
{% elseif value == 2 %}
|
||||
@ -10,7 +10,7 @@
|
||||
{% endif %}
|
||||
{%- endmacro %}
|
||||
|
||||
{%- macro level_info(value) %}
|
||||
{%- macro level_type(value) %}
|
||||
{% if value == 1 %}
|
||||
入门
|
||||
{% elseif value == 2 %}
|
||||
@ -32,7 +32,7 @@
|
||||
{%- macro course_card(course) %}
|
||||
{% set course_url = url({'for':'home.course.show','id':course.id}) %}
|
||||
<div class="course-card">
|
||||
<span class="model layui-badge layui-bg-green">{{ model_info(course.model) }}</span>
|
||||
<span class="model layui-badge layui-bg-green">{{ model_type(course.model) }}</span>
|
||||
<div class="cover">
|
||||
<a href="{{ course_url }}" target="_blank">
|
||||
<img src="{{ course.cover }}!cover_270" alt="{{ course.title }}" title="{{ course.title }}">
|
||||
@ -50,16 +50,16 @@
|
||||
{% else %}
|
||||
<span class="free">会员免费</span>
|
||||
{% endif %}
|
||||
<span class="level">{{ level_info(course.level) }}</span>
|
||||
<span class="level">{{ level_type(course.level) }}</span>
|
||||
<span class="user">{{ course.user_count }}人购买</span>
|
||||
{% elseif course.market_price > 0 %}
|
||||
<span class="price">{{ '¥%0.2f'|format(course.market_price) }}</span>
|
||||
<span class="level">{{ level_info(course.level) }}</span>
|
||||
<span class="level">{{ level_type(course.level) }}</span>
|
||||
<span class="lesson">{{ course.lesson_count }}节课</span>
|
||||
<span class="user">{{ course.user_count }}人购买</span>
|
||||
{% else %}
|
||||
<span class="free">免费</span>
|
||||
<span class="level">{{ level_info(course.level) }}</span>
|
||||
<span class="level">{{ level_type(course.level) }}</span>
|
||||
<span class="lesson">{{ course.lesson_count }}节课</span>
|
||||
<span class="user">{{ course.user_count }}人报名</span>
|
||||
{% endif %}
|
||||
@ -81,11 +81,11 @@
|
||||
<div class="meta">
|
||||
{% if course.market_price > 0 %}
|
||||
<span class="price">{{ '¥%0.2f'|format(course.market_price) }}</span>
|
||||
<span class="level">{{ level_info(course.level) }}</span>
|
||||
<span class="level">{{ level_type(course.level) }}</span>
|
||||
<span class="user">{{ course.user_count }}人购买</span>
|
||||
{% else %}
|
||||
<span class="free">免费</span>
|
||||
<span class="level">{{ level_info(course.level) }}</span>
|
||||
<span class="level">{{ level_type(course.level) }}</span>
|
||||
<span class="user">{{ course.user_count }}人报名</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
@ -97,7 +97,7 @@
|
||||
{% set course_title = item.course.title %}
|
||||
{% set course_url = url({'for':'home.course.show','id':item.course.id}) %}
|
||||
<div class="course-card">
|
||||
<span class="model layui-badge layui-bg-green">{{ model_info(item.course.model) }}</span>
|
||||
<span class="model layui-badge layui-bg-green">{{ model_type(item.course.model) }}</span>
|
||||
<div class="cover">
|
||||
<a href="{{ course_url }}" title="{{ course_title }}" target="_blank">
|
||||
<img src="{{ item.course.cover }}!cover_270" alt="{{ course_title }}">
|
||||
|
19
app/Http/Home/Views/macros/point_gift.volt
Normal file
19
app/Http/Home/Views/macros/point_gift.volt
Normal file
@ -0,0 +1,19 @@
|
||||
{%- macro gift_type_info(value) %}
|
||||
{% if value == 1 %}
|
||||
课程
|
||||
{% elseif value == 2 %}
|
||||
商品
|
||||
{% elseif value == 3 %}
|
||||
现金
|
||||
{% endif %}
|
||||
{%- endmacro %}
|
||||
|
||||
{%- macro redeem_status_info(value) %}
|
||||
{% if value == 1 %}
|
||||
处理中
|
||||
{% elseif value == 2 %}
|
||||
已完成
|
||||
{% elseif value == 3 %}
|
||||
已失败
|
||||
{% endif %}
|
||||
{%- endmacro %}
|
@ -1,23 +1,3 @@
|
||||
{%- macro redeem_status_info(value) %}
|
||||
{% if value == 1 %}
|
||||
<span class="status">处理中</span>
|
||||
{% elseif value == 2 %}
|
||||
<span class="status">已完成</span>
|
||||
{% elseif value == 3 %}
|
||||
<span class="status">已失败</span>
|
||||
{% endif %}
|
||||
{%- endmacro %}
|
||||
|
||||
{%- macro gift_type_info(value) %}
|
||||
{% if value == 1 %}
|
||||
<span class="layui-badge layui-bg-green type">课程</span>
|
||||
{% elseif value == 2 %}
|
||||
<span class="layui-badge layui-bg-blue type">商品</span>
|
||||
{% elseif value == 3 %}
|
||||
<span class="layui-badge layui-bg-cyan type">现金</span>
|
||||
{% endif %}
|
||||
{%- endmacro %}
|
||||
|
||||
{%- macro event_point_info(value) %}
|
||||
{% if value > 0 %}
|
||||
<span class="layui-badge layui-bg-green point">+{{ value }}</span>
|
||||
@ -64,11 +44,11 @@
|
||||
{% if type == 1 %}
|
||||
<p class="order">{{ info.order.subject }}</p>
|
||||
{% elseif type == 2 %}
|
||||
{% set gift_url = url({'for':'home.point_gift.show','id':info.point_redeem.gift_id}) %}
|
||||
<p class="gift"><a href="{{ gift_url }}" target="_blank">{{ info.point_redeem.gift_name }}</a></p>
|
||||
{% set gift_url = url({'for':'home.point_gift.show','id':info.point_gift_redeem.gift_id}) %}
|
||||
<p class="gift"><a href="{{ gift_url }}" target="_blank">{{ info.point_gift_redeem.gift_name }}</a></p>
|
||||
{% elseif type == 3 %}
|
||||
{% set gift_url = url({'for':'home.point_gift.show','id':info.point_redeem.gift_id}) %}
|
||||
<p class="gift"><a href="{{ gift_url }}" target="_blank">{{ info.point_redeem.gift_name }}</a></p>
|
||||
{% set gift_url = url({'for':'home.point_gift.show','id':info.point_gift_redeem.gift_id}) %}
|
||||
<p class="gift"><a href="{{ gift_url }}" target="_blank">{{ info.point_gift_redeem.gift_name }}</a></p>
|
||||
{% elseif type == 4 %}
|
||||
<span class="none">N/A</span>
|
||||
{% elseif type == 5 %}
|
@ -60,7 +60,7 @@
|
||||
</p>
|
||||
<p>
|
||||
<span class="key">难度</span>
|
||||
<span class="value">{{ level_info(course.level) }}</span>
|
||||
<span class="value">{{ level_type(course.level) }}</span>
|
||||
<span class="key">课时</span>
|
||||
<span class="value">{{ course.lesson_count }}</span>
|
||||
<span class="key">学员</span>
|
||||
|
@ -1,4 +1,4 @@
|
||||
{{ partial('macros/point') }}
|
||||
{{ partial('macros/point_gift') }}
|
||||
|
||||
{% if pager.total_pages > 0 %}
|
||||
<div class="course-list clearfix">
|
@ -2,9 +2,9 @@
|
||||
|
||||
{% block content %}
|
||||
|
||||
{{ partial('macros/point') }}
|
||||
{{ partial('macros/point_gift') }}
|
||||
|
||||
{% set redeem_create_url = url({'for':'home.point_redeem.create'}) %}
|
||||
{% set gift_redeem_url = url({'for':'home.point_gift.redeem','id':gift.id}) %}
|
||||
{% set gift_list_url = url({'for':'home.point_gift.list'}) %}
|
||||
|
||||
<div class="breadcrumb">
|
||||
@ -22,6 +22,7 @@
|
||||
<div class="layui-card-body">
|
||||
<div class="gift-meta clearfix">
|
||||
<div class="cover">
|
||||
<span class="layui-badge layui-bg-green type">{{ gift_type_info(gift.type) }}</span>
|
||||
<img src="{{ gift.cover }}!cover_270" alt="{{ gift.name }}">
|
||||
</div>
|
||||
<div class="info">
|
||||
@ -29,27 +30,23 @@
|
||||
{% set course_url = url({'for':'home.course.show','id':gift.attrs.id}) %}
|
||||
<p class="item">
|
||||
<a href="{{ course_url }}">{{ gift.name }}</a>
|
||||
{{ gift_type_info(gift.type) }}
|
||||
</p>
|
||||
{% else %}
|
||||
<p class="item">{{ gift.name }} {{ gift_type_info(gift.type) }}</p>
|
||||
<p class="item">{{ gift.name }} }}</p>
|
||||
{% endif %}
|
||||
<p class="item stats">
|
||||
<span class="key">兑换库存</span>
|
||||
<span class="value">{{ gift.stock }}</span>
|
||||
<span class="key">兑换价格</span>
|
||||
<span class="price">{{ gift.point }} 积分</span>
|
||||
<span class="key">兑换限额</span>
|
||||
<span class="value">{{ gift.redeem_limit }}</span>
|
||||
<span class="key">兑换人次</span>
|
||||
<span class="value">{{ gift.redeem_count }}</span>
|
||||
<span class="key">兑换限额</span>
|
||||
<span class="value">{{ gift.redeem_limit }}</span>
|
||||
</p>
|
||||
<p class="item">
|
||||
{% if gift.stock > 0 and user_balance.point > gift.point %}
|
||||
<button class="layui-btn layui-bg-red btn-redeem" data-id="{{ gift.id }}" data-url="{{ redeem_create_url }}">立即兑换</button>
|
||||
{% else %}
|
||||
<button class="layui-btn layui-btn-disabled">立即兑换</button>
|
||||
{% endif %}
|
||||
<p class="item stats">
|
||||
<span class="key">兑换价格</span>
|
||||
<span class="price">{{ gift.point }} 积分</span>
|
||||
</p>
|
||||
<p class="item stats">
|
||||
<span class="key">库存数量</span>
|
||||
<span class="value">{{ gift.stock }}</span>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@ -79,6 +76,13 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sidebar wrap">
|
||||
{% if gift.me.allow_redeem == 1 %}
|
||||
<button class="layui-btn layui-bg-red layui-btn-fluid btn-redeem" data-url="{{ gift_redeem_url }}">立即兑换</button>
|
||||
{% else %}
|
||||
<button class="layui-btn layui-btn-fluid layui-btn-disabled">立即兑换</button>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="sidebar">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">热门兑换</div>
|
@ -16,7 +16,7 @@
|
||||
<div class="summary">{{ item.summary }}</div>
|
||||
<div class="meta">
|
||||
<span>讲师:<a href="{{ teacher_url }}" target="_blank">{{ item.teacher.name }}</a></span>
|
||||
<span>难度:{{ level_info(item.level) }}</span>
|
||||
<span>难度:{{ level_type(item.level) }}</span>
|
||||
<span>课时:{{ item.lesson_count }}</span>
|
||||
<span>学员:{{ item.user_count }}</span>
|
||||
</div>
|
||||
|
@ -33,7 +33,7 @@
|
||||
{% for item in pager.items %}
|
||||
{% set course_url = url({'for':'home.course.show','id':item.id}) %}
|
||||
<tr>
|
||||
<td><a href="{{ course_url }}">{{ item.title }}</a> {{ model_info(item.model) }}</td>
|
||||
<td><a href="{{ course_url }}">{{ item.title }}</a> {{ model_type(item.model) }}</td>
|
||||
<td>{{ item.lesson_count }}</td>
|
||||
<td>{{ item.user_count }}</td>
|
||||
<td>{{ item.favorite_count }}</td>
|
||||
|
@ -35,7 +35,7 @@
|
||||
<td>
|
||||
<p>标题:<a href="{{ course_url }}" target="_blank">{{ item.course.title }}</a></p>
|
||||
<p class="meta">
|
||||
类型:<span class="layui-badge layui-bg-gray">{{ model_info(item.course.model) }}</span>
|
||||
类型:<span class="layui-badge layui-bg-gray">{{ model_type(item.course.model) }}</span>
|
||||
来源:<span class="layui-badge layui-bg-gray">{{ source_type_info(item.source_type) }}</span>
|
||||
{% if item.expiry_time > 0 %}
|
||||
期限:{{ date('Y-m-d',item.expiry_time) }}
|
||||
|
@ -56,7 +56,7 @@
|
||||
<div class="layui-card-body">
|
||||
<ul class="my-menu">
|
||||
<li><a href="{{ url({'for':'home.point_gift.list'}) }}">积分商城</a></li>
|
||||
<li><a href="{{ url({'for':'home.uc.point_redeems'}) }}">兑换记录</a></li>
|
||||
<li><a href="{{ url({'for':'home.uc.point_gift_redeems'}) }}">兑换记录</a></li>
|
||||
<li><a href="{{ url({'for':'home.uc.point_history'}) }}">积分记录</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
{% block content %}
|
||||
|
||||
{{ partial('macros/point') }}
|
||||
{{ partial('macros/point_gift') }}
|
||||
|
||||
<div class="layout-main clearfix">
|
||||
<div class="my-sidebar">{{ partial('user/console/menu') }}</div>
|
@ -2,7 +2,7 @@
|
||||
|
||||
{% block content %}
|
||||
|
||||
{{ partial('macros/point') }}
|
||||
{{ partial('macros/point_history') }}
|
||||
|
||||
<div class="layout-main clearfix">
|
||||
<div class="my-sidebar">{{ partial('user/console/menu') }}</div>
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
class PointRedeem extends Model
|
||||
class PointGiftRedeem extends Model
|
||||
{
|
||||
|
||||
/**
|
||||
@ -117,7 +117,7 @@ class PointRedeem extends Model
|
||||
|
||||
public function getSource(): string
|
||||
{
|
||||
return 'kg_point_redeem';
|
||||
return 'kg_point_gift_redeem';
|
||||
}
|
||||
|
||||
public function beforeCreate()
|
@ -36,8 +36,8 @@ class Task extends Model
|
||||
const TYPE_STAFF_NOTICE_TEACHER_LIVE = 32; // 直播讲师通知
|
||||
const TYPE_STAFF_NOTICE_SERVER_MONITOR = 33; // 服务监控通知
|
||||
const TYPE_STAFF_NOTICE_CUSTOM_SERVICE = 34; // 客服消息通知
|
||||
const TYPE_STAFF_NOTICE_POINT_REDEEM = 35; // 积分兑换通知
|
||||
const TYPE_STAFF_NOTICE_LUCKY_REDEEM = 36; // 抽奖兑换通知
|
||||
const TYPE_STAFF_NOTICE_POINT_GIFT_REDEEM = 35; // 积分兑换通知
|
||||
const TYPE_STAFF_NOTICE_LUCKY_GIFT_REDEEM = 36; // 抽奖兑换通知
|
||||
|
||||
/**
|
||||
* 优先级
|
||||
|
@ -8,17 +8,17 @@
|
||||
namespace App\Repos;
|
||||
|
||||
use App\Library\Paginator\Adapter\QueryBuilder as PagerQueryBuilder;
|
||||
use App\Models\PointRedeem as PointRedeemModel;
|
||||
use App\Models\PointGiftRedeem as PointGiftRedeemModel;
|
||||
use Phalcon\Mvc\Model;
|
||||
|
||||
class PointRedeem extends Repository
|
||||
class PointGiftRedeem extends Repository
|
||||
{
|
||||
|
||||
public function paginate($where = [], $sort = 'latest', $page = 1, $limit = 15)
|
||||
{
|
||||
$builder = $this->modelsManager->createBuilder();
|
||||
|
||||
$builder->from(PointRedeemModel::class);
|
||||
$builder->from(PointGiftRedeemModel::class);
|
||||
|
||||
$builder->where('1 = 1');
|
||||
|
||||
@ -57,11 +57,11 @@ class PointRedeem extends Repository
|
||||
|
||||
/**
|
||||
* @param int $id
|
||||
* @return PointRedeemModel|Model|bool
|
||||
* @return PointGiftRedeemModel|Model|bool
|
||||
*/
|
||||
public function findById($id)
|
||||
{
|
||||
return PointRedeemModel::findFirst([
|
||||
return PointGiftRedeemModel::findFirst([
|
||||
'conditions' => 'id = :id:',
|
||||
'bind' => ['id' => $id],
|
||||
]);
|
||||
@ -69,7 +69,7 @@ class PointRedeem extends Repository
|
||||
|
||||
public function countUserGiftRedeems($userId, $giftId)
|
||||
{
|
||||
return (int)PointRedeemModel::count([
|
||||
return (int)PointGiftRedeemModel::count([
|
||||
'conditions' => 'user_id = :user_id: AND gift_id = :gift_id:',
|
||||
'bind' => ['user_id' => $userId, 'gift_id' => $giftId],
|
||||
]);
|
@ -14,7 +14,7 @@ use App\Models\Consult as ConsultModel;
|
||||
use App\Models\Online as OnlineModel;
|
||||
use App\Models\Order as OrderModel;
|
||||
use App\Models\OrderStatus as OrderStatusModel;
|
||||
use App\Models\PointRedeem as PointRedeemModel;
|
||||
use App\Models\PointGiftRedeem as PointGiftRedeemModel;
|
||||
use App\Models\Question as QuestionModel;
|
||||
use App\Models\Refund as RefundModel;
|
||||
use App\Models\Review as ReviewModel;
|
||||
@ -162,16 +162,16 @@ class Stat extends Repository
|
||||
]);
|
||||
}
|
||||
|
||||
public function countDailyPointRedeems($date)
|
||||
public function countDailyPointGiftRedeems($date)
|
||||
{
|
||||
$startTime = strtotime($date);
|
||||
|
||||
$endTime = $startTime + 86400;
|
||||
|
||||
return (int)PointRedeemModel::count([
|
||||
return (int)PointGiftRedeemModel::count([
|
||||
'conditions' => 'status = ?1 AND create_time BETWEEN ?2 AND ?3',
|
||||
'bind' => [
|
||||
1 => PointRedeemModel::STATUS_PENDING,
|
||||
1 => PointGiftRedeemModel::STATUS_PENDING,
|
||||
2 => $startTime,
|
||||
3 => $endTime,
|
||||
],
|
||||
|
@ -8,19 +8,19 @@
|
||||
namespace App\Services\Logic\Notice\DingTalk;
|
||||
|
||||
use App\Models\PointGift as PointGiftModel;
|
||||
use App\Models\PointRedeem as PointRedeemModel;
|
||||
use App\Models\PointGiftRedeem as PointGiftRedeemModel;
|
||||
use App\Models\Task as TaskModel;
|
||||
use App\Repos\PointRedeem as PointRedeemRepo;
|
||||
use App\Repos\PointGiftRedeem as PointGiftRedeemRepo;
|
||||
use App\Services\DingTalkNotice;
|
||||
|
||||
class PointRedeem extends DingTalkNotice
|
||||
class PointGiftRedeem extends DingTalkNotice
|
||||
{
|
||||
|
||||
public function handleTask(TaskModel $task)
|
||||
{
|
||||
if (!$this->enabled) return;
|
||||
|
||||
$redeemRepo = new PointRedeemRepo();
|
||||
$redeemRepo = new PointGiftRedeemRepo();
|
||||
|
||||
$redeem = $redeemRepo->findById($task->item_id);
|
||||
|
||||
@ -32,7 +32,7 @@ class PointRedeem extends DingTalkNotice
|
||||
$this->atCustomService($content);
|
||||
}
|
||||
|
||||
public function createTask(PointRedeemModel $redeem)
|
||||
public function createTask(PointGiftRedeemModel $redeem)
|
||||
{
|
||||
if (!$this->enabled) return;
|
||||
|
||||
@ -41,12 +41,12 @@ class PointRedeem extends DingTalkNotice
|
||||
$task = new TaskModel();
|
||||
|
||||
$itemInfo = [
|
||||
'point_redeem' => ['id' => $redeem->id],
|
||||
'point_gift_redeem' => ['id' => $redeem->id],
|
||||
];
|
||||
|
||||
$task->item_id = $redeem->id;
|
||||
$task->item_info = $itemInfo;
|
||||
$task->item_type = TaskModel::TYPE_STAFF_NOTICE_POINT_REDEEM;
|
||||
$task->item_type = TaskModel::TYPE_STAFF_NOTICE_POINT_GIFT_REDEEM;
|
||||
$task->priority = TaskModel::PRIORITY_MIDDLE;
|
||||
$task->status = TaskModel::STATUS_PENDING;
|
||||
|
@ -7,9 +7,9 @@
|
||||
|
||||
namespace App\Services\Logic\Notice;
|
||||
|
||||
use App\Models\PointRedeem as PointRedeemModel;
|
||||
use App\Models\PointGiftRedeem as PointGiftRedeemModel;
|
||||
use App\Models\Task as TaskModel;
|
||||
use App\Repos\PointRedeem as PointRedeemRepo;
|
||||
use App\Repos\PointGiftRedeem as PointGiftRedeemRepo;
|
||||
use App\Repos\User as UserRepo;
|
||||
use App\Repos\WeChatSubscribe as WeChatSubscribeRepo;
|
||||
use App\Services\Logic\Notice\Sms\GoodsDeliver as SmsGoodsDeliverNotice;
|
||||
@ -28,7 +28,7 @@ class PointGoodsDeliver extends LogicService
|
||||
|
||||
$redeemId = $task->item_info['point_redeem']['id'];
|
||||
|
||||
$redeemRepo = new PointRedeemRepo();
|
||||
$redeemRepo = new PointGiftRedeemRepo();
|
||||
|
||||
$redeem = $redeemRepo->findById($redeemId);
|
||||
|
||||
@ -61,7 +61,7 @@ class PointGoodsDeliver extends LogicService
|
||||
}
|
||||
}
|
||||
|
||||
public function createTask(PointRedeemModel $redeem)
|
||||
public function createTask(PointGiftRedeemModel $redeem)
|
||||
{
|
||||
$wechatNoticeEnabled = $this->wechatNoticeEnabled();
|
||||
$smsNoticeEnabled = $this->smsNoticeEnabled();
|
||||
@ -71,7 +71,7 @@ class PointGoodsDeliver extends LogicService
|
||||
$task = new TaskModel();
|
||||
|
||||
$itemInfo = [
|
||||
'point_redeem' => ['id' => $redeem->id],
|
||||
'point_gift_redeem' => ['id' => $redeem->id],
|
||||
];
|
||||
|
||||
$task->item_id = $redeem->id;
|
||||
|
@ -8,6 +8,7 @@
|
||||
namespace App\Services\Logic\Point;
|
||||
|
||||
use App\Models\PointGift;
|
||||
use App\Repos\User as UserRepo;
|
||||
use App\Services\Logic\CourseTrait;
|
||||
use App\Services\Logic\PointGiftTrait;
|
||||
use App\Services\Logic\Service as LogicService;
|
||||
@ -28,6 +29,8 @@ class GiftInfo extends LogicService
|
||||
|
||||
$gift->details = kg_parse_markdown($gift->details);
|
||||
|
||||
$meInfo = $this->handleMeInfo($gift);
|
||||
|
||||
return [
|
||||
'id' => $gift->id,
|
||||
'name' => $gift->name,
|
||||
@ -43,6 +46,7 @@ class GiftInfo extends LogicService
|
||||
'redeem_count' => $gift->redeem_count,
|
||||
'create_time' => $gift->create_time,
|
||||
'update_time' => $gift->update_time,
|
||||
'me' => $meInfo,
|
||||
];
|
||||
}
|
||||
|
||||
@ -64,4 +68,21 @@ class GiftInfo extends LogicService
|
||||
return $gift;
|
||||
}
|
||||
|
||||
protected function handleMeInfo(PointGift $gift)
|
||||
{
|
||||
$me = ['allow_redeem' => 0];
|
||||
|
||||
$user = $this->getLoginUser(true);
|
||||
|
||||
$userRepo = new UserRepo();
|
||||
|
||||
$balance = $userRepo->findUserBalance($user->id);
|
||||
|
||||
if ($gift->stock > 0 && $balance->point > $gift->point) {
|
||||
$me['allow_redeem'] = 1;
|
||||
}
|
||||
|
||||
return $me;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -9,40 +9,36 @@ namespace App\Services\Logic\Point;
|
||||
|
||||
use App\Library\Utils\Lock as LockUtil;
|
||||
use App\Models\PointGift as PointGiftModel;
|
||||
use App\Models\PointRedeem as PointRedeemModel;
|
||||
use App\Models\PointGiftRedeem as PointGiftRedeemModel;
|
||||
use App\Models\Task as TaskModel;
|
||||
use App\Models\User as UserModel;
|
||||
use App\Repos\User as UserRepo;
|
||||
use App\Services\Logic\Point\History\PointRedeem as PointRedeemPointHistory;
|
||||
use App\Services\Logic\Point\History\PointGiftRedeem as PointGiftRedeemPointHistory;
|
||||
use App\Services\Logic\PointGiftTrait;
|
||||
use App\Services\Logic\Service as LogicService;
|
||||
use App\Validators\PointRedeem as PointRedeemValidator;
|
||||
use App\Validators\PointGiftRedeem as PointGiftRedeemValidator;
|
||||
|
||||
class PointRedeem extends LogicService
|
||||
class GiftRedeem extends LogicService
|
||||
{
|
||||
|
||||
use PointGiftTrait;
|
||||
|
||||
public function handle()
|
||||
public function handle($id)
|
||||
{
|
||||
$giftId = $this->request->getPost('gift_id', ['trim', 'int']);
|
||||
|
||||
$gift = $this->checkPointGift($giftId);
|
||||
$gift = $this->checkPointGift($id);
|
||||
|
||||
$user = $this->getLoginUser();
|
||||
|
||||
$validator = new PointRedeemValidator();
|
||||
$validator = new PointGiftRedeemValidator();
|
||||
|
||||
$validator->checkIfAllowRedeem($gift, $user);
|
||||
|
||||
$this->createPointRedeem($gift, $user);
|
||||
$this->createGiftRedeem($gift, $user);
|
||||
}
|
||||
|
||||
protected function createPointRedeem(PointGiftModel $gift, UserModel $user)
|
||||
protected function createGiftRedeem(PointGiftModel $gift, UserModel $user)
|
||||
{
|
||||
$logger = $this->getLogger('point');
|
||||
|
||||
$itemId = "point_redeem:{$gift->id}";
|
||||
$itemId = "point_gift_redeem:{$gift->id}";
|
||||
|
||||
$lockId = LockUtil::addLock($itemId);
|
||||
|
||||
@ -54,7 +50,7 @@ class PointRedeem extends LogicService
|
||||
|
||||
$this->db->begin();
|
||||
|
||||
$redeem = new PointRedeemModel();
|
||||
$redeem = new PointGiftRedeemModel();
|
||||
|
||||
$redeem->user_id = $user->id;
|
||||
$redeem->user_name = $user->name;
|
||||
@ -71,7 +67,7 @@ class PointRedeem extends LogicService
|
||||
$redeem->contact_address = $contact->fullAddress();
|
||||
}
|
||||
|
||||
$redeem->status = PointRedeemModel::STATUS_PENDING;
|
||||
$redeem->status = PointGiftRedeemModel::STATUS_PENDING;
|
||||
|
||||
$result = $redeem->create();
|
||||
|
||||
@ -89,7 +85,7 @@ class PointRedeem extends LogicService
|
||||
$task = new TaskModel();
|
||||
|
||||
$itemInfo = [
|
||||
'point_redeem' => [
|
||||
'point_gift_redeem' => [
|
||||
'id' => $redeem->id,
|
||||
'user_id' => $redeem->user_id,
|
||||
'gift_id' => $redeem->gift_id,
|
||||
@ -114,7 +110,9 @@ class PointRedeem extends LogicService
|
||||
|
||||
$this->db->rollback();
|
||||
|
||||
$logger->error('Point Redeem Exception ' . kg_json_encode([
|
||||
$logger = $this->getLogger('point');
|
||||
|
||||
$logger->error('Gift Redeem Exception ' . kg_json_encode([
|
||||
'file' => $e->getFile(),
|
||||
'line' => $e->getLine(),
|
||||
'message' => $e->getMessage(),
|
||||
@ -126,9 +124,9 @@ class PointRedeem extends LogicService
|
||||
LockUtil::releaseLock($itemId, $lockId);
|
||||
}
|
||||
|
||||
protected function handleRedeemPoint(PointRedeemModel $redeem)
|
||||
protected function handleRedeemPoint(PointGiftRedeemModel $redeem)
|
||||
{
|
||||
$service = new PointRedeemPointHistory();
|
||||
$service = new PointGiftRedeemPointHistory();
|
||||
|
||||
$service->handle($redeem);
|
||||
}
|
@ -7,16 +7,16 @@
|
||||
|
||||
namespace App\Services\Logic\Point\History;
|
||||
|
||||
use App\Models\PointGiftRedeem as PointGiftRedeemModel;
|
||||
use App\Models\PointHistory as PointHistoryModel;
|
||||
use App\Models\PointRedeem as PointRedeemModel;
|
||||
use App\Repos\PointHistory as PointHistoryRepo;
|
||||
use App\Repos\User as UserRepo;
|
||||
use App\Services\Logic\Point\PointHistory;
|
||||
|
||||
class PointRedeem extends PointHistory
|
||||
class PointGiftRedeem extends PointHistory
|
||||
{
|
||||
|
||||
public function handle(PointRedeemModel $redeem)
|
||||
public function handle(PointGiftRedeemModel $redeem)
|
||||
{
|
||||
$setting = $this->getSettings('point');
|
||||
|
||||
@ -39,7 +39,7 @@ class PointRedeem extends PointHistory
|
||||
$user = $userRepo->findById($redeem->user_id);
|
||||
|
||||
$eventInfo = [
|
||||
'point_redeem' => [
|
||||
'point_gift_redeem' => [
|
||||
'id' => $redeem->id,
|
||||
'gift_id' => $redeem->gift_id,
|
||||
'gift_name' => $redeem->gift_name,
|
||||
|
@ -7,8 +7,8 @@
|
||||
|
||||
namespace App\Services\Logic\Point\History;
|
||||
|
||||
use App\Models\PointGiftRedeem as PointGiftRedeemModel;
|
||||
use App\Models\PointHistory as PointHistoryModel;
|
||||
use App\Models\PointRedeem as PointRedeemModel;
|
||||
use App\Repos\PointHistory as PointHistoryRepo;
|
||||
use App\Repos\User as UserRepo;
|
||||
use App\Services\Logic\Point\PointHistory;
|
||||
@ -16,7 +16,7 @@ use App\Services\Logic\Point\PointHistory;
|
||||
class PointRefund extends PointHistory
|
||||
{
|
||||
|
||||
public function handle(PointRedeemModel $redeem)
|
||||
public function handle(PointGiftRedeemModel $redeem)
|
||||
{
|
||||
$eventId = $redeem->id;
|
||||
$eventType = PointHistoryModel::EVENT_POINT_REFUND;
|
||||
@ -33,7 +33,7 @@ class PointRefund extends PointHistory
|
||||
$user = $userRepo->findById($redeem->user_id);
|
||||
|
||||
$eventInfo = [
|
||||
'point_redeem' => [
|
||||
'point_gift_redeem' => [
|
||||
'id' => $redeem->id,
|
||||
'gift_id' => $redeem->gift_id,
|
||||
'gift_name' => $redeem->gift_name,
|
||||
|
@ -8,12 +8,12 @@
|
||||
namespace App\Services\Logic\User\Console;
|
||||
|
||||
use App\Library\Paginator\Query as PagerQuery;
|
||||
use App\Models\PointRedeem as PointRedeemModel;
|
||||
use App\Repos\PointRedeem as PointRedeemRepo;
|
||||
use App\Models\PointGiftRedeem as PointGiftRedeemModel;
|
||||
use App\Repos\PointGiftRedeem as PointGiftRedeemRepo;
|
||||
use App\Services\Logic\Service as LogicService;
|
||||
use App\Services\Logic\UserTrait;
|
||||
|
||||
class PointRedeemList extends LogicService
|
||||
class PointGiftRedeemList extends LogicService
|
||||
{
|
||||
|
||||
use UserTrait;
|
||||
@ -33,7 +33,7 @@ class PointRedeemList extends LogicService
|
||||
$page = $pagerQuery->getPage();
|
||||
$limit = $pagerQuery->getLimit();
|
||||
|
||||
$redeemRepo = new PointRedeemRepo();
|
||||
$redeemRepo = new PointGiftRedeemRepo();
|
||||
|
||||
$pager = $redeemRepo->paginate($params, $sort, $page, $limit);
|
||||
|
||||
@ -49,7 +49,7 @@ class PointRedeemList extends LogicService
|
||||
$items = [];
|
||||
|
||||
/**
|
||||
* @var PointRedeemModel[] $redeems
|
||||
* @var PointGiftRedeemModel[] $redeems
|
||||
*/
|
||||
$redeems = $pager->items;
|
||||
|
@ -12,21 +12,21 @@ use App\Models\Course as CourseModel;
|
||||
use App\Models\PointGift as PointGiftModel;
|
||||
use App\Models\User as UserModel;
|
||||
use App\Repos\CourseUser as CourseUserRepo;
|
||||
use App\Repos\PointRedeem as PointRedeemRepo;
|
||||
use App\Repos\PointGiftRedeem as PointGiftRedeemRepo;
|
||||
use App\Repos\User as UserRepo;
|
||||
|
||||
|
||||
class PointRedeem extends Validator
|
||||
class PointGiftRedeem extends Validator
|
||||
{
|
||||
|
||||
public function checkRedeem($id)
|
||||
{
|
||||
$redeemRepo = new PointRedeemRepo();
|
||||
$redeemRepo = new PointGiftRedeemRepo();
|
||||
|
||||
$redeem = $redeemRepo->findById($id);
|
||||
|
||||
if (!$redeem) {
|
||||
throw new BadRequestException('point_redeem.not_found');
|
||||
throw new BadRequestException('point_gift_redeem.not_found');
|
||||
}
|
||||
|
||||
return $redeem;
|
||||
@ -64,11 +64,11 @@ class PointRedeem extends Validator
|
||||
protected function checkIfAllowRedeemCourse(CourseModel $course, UserModel $user)
|
||||
{
|
||||
if ($course->published == 0) {
|
||||
throw new BadRequestException('point_redeem.course_not_published');
|
||||
throw new BadRequestException('point_gift_redeem.course_not_published');
|
||||
}
|
||||
|
||||
if ($course->market_price == 0) {
|
||||
throw new BadRequestException('point_redeem.course_free');
|
||||
throw new BadRequestException('point_gift_redeem.course_free');
|
||||
}
|
||||
|
||||
$courseUserRepo = new CourseUserRepo();
|
||||
@ -76,7 +76,7 @@ class PointRedeem extends Validator
|
||||
$courseUser = $courseUserRepo->findCourseUser($course->id, $user->id);
|
||||
|
||||
if ($courseUser && $courseUser->expiry_time > time()) {
|
||||
throw new BadRequestException('point_redeem.course_owned');
|
||||
throw new BadRequestException('point_gift_redeem.course_owned');
|
||||
}
|
||||
}
|
||||
|
||||
@ -87,25 +87,25 @@ class PointRedeem extends Validator
|
||||
$contact = $userRepo->findUserContact($user->id);
|
||||
|
||||
if (!$contact) {
|
||||
throw new BadRequestException('point_redeem.no_user_contact');
|
||||
throw new BadRequestException('point_gift_redeem.no_user_contact');
|
||||
}
|
||||
}
|
||||
|
||||
protected function checkStock(PointGiftModel $gift)
|
||||
{
|
||||
if ($gift->stock < 1) {
|
||||
throw new BadRequestException('point_redeem.no_enough_stock');
|
||||
throw new BadRequestException('point_gift_redeem.no_enough_stock');
|
||||
}
|
||||
}
|
||||
|
||||
protected function checkRedeemLimit(PointGiftModel $gift, UserModel $user)
|
||||
{
|
||||
$redeemRepo = new PointRedeemRepo();
|
||||
$redeemRepo = new PointGiftRedeemRepo();
|
||||
|
||||
$count = $redeemRepo->countUserGiftRedeems($user->id, $gift->id);
|
||||
|
||||
if ($count >= $gift->redeem_limit) {
|
||||
throw new BadRequestException('point_redeem.reach_redeem_limit');
|
||||
throw new BadRequestException('point_gift_redeem.reach_redeem_limit');
|
||||
}
|
||||
}
|
||||
|
||||
@ -116,7 +116,7 @@ class PointRedeem extends Validator
|
||||
$balance = $userRepo->findUserBalance($user->id);
|
||||
|
||||
if (!$balance || $balance->point < $gift->point) {
|
||||
throw new BadRequestException('point_redeem.no_enough_point');
|
||||
throw new BadRequestException('point_gift_redeem.no_enough_point');
|
||||
}
|
||||
}
|
||||
|
@ -505,14 +505,14 @@ $error['point_gift.invalid_stock'] = '无效的库存值(范围:1-999999)'
|
||||
$error['point_gift.invalid_redeem_limit'] = '无效的兑换限额(范围:1-10)';
|
||||
$error['point_gift.invalid_publish_status'] = '无效的发布状态';
|
||||
|
||||
$error['point_redeem.not_found'] = '兑换不存在';
|
||||
$error['point_redeem.course_not_published'] = '课程尚未发布';
|
||||
$error['point_redeem.course_free'] = '课程当前免费,无需积分兑换';
|
||||
$error['point_redeem.course_owned'] = '您已经拥有课程,无需积分兑换';
|
||||
$error['point_redeem.no_user_contact'] = '您尚未设置收货地址,请前往用户中心设置';
|
||||
$error['point_redeem.reach_redeem_limit'] = '超出物品兑换限额';
|
||||
$error['point_redeem.no_enough_point'] = '您的积分余额不足以抵扣此次兑换';
|
||||
$error['point_redeem.no_enough_stock'] = '兑换物品库存不足';
|
||||
$error['point_gift_redeem.not_found'] = '兑换不存在';
|
||||
$error['point_gift_redeem.course_not_published'] = '课程尚未发布';
|
||||
$error['point_gift_redeem.course_free'] = '课程当前免费,无需积分兑换';
|
||||
$error['point_gift_redeem.course_owned'] = '您已经拥有课程,无需积分兑换';
|
||||
$error['point_gift_redeem.no_user_contact'] = '您尚未设置收货地址,请前往用户中心设置';
|
||||
$error['point_gift_redeem.reach_redeem_limit'] = '超出物品兑换限额';
|
||||
$error['point_gift_redeem.no_enough_point'] = '您的积分余额不足以抵扣此次兑换';
|
||||
$error['point_gift_redeem.no_enough_stock'] = '兑换物品库存不足';
|
||||
|
||||
/**
|
||||
* 限时秒杀相关
|
||||
|
46
db/migrations/20220117122902.php
Normal file
46
db/migrations/20220117122902.php
Normal file
@ -0,0 +1,46 @@
|
||||
<?php
|
||||
|
||||
use Phinx\Migration\AbstractMigration;
|
||||
|
||||
final class V20220117122902 extends AbstractMigration
|
||||
{
|
||||
|
||||
public function up()
|
||||
{
|
||||
$this->renameGiftRedeemTable();
|
||||
$this->handlePointHistory();
|
||||
}
|
||||
|
||||
protected function renameGiftRedeemTable()
|
||||
{
|
||||
if ($this->table('kg_point_redeem')->exists()) {
|
||||
$this->table('kg_point_redeem')
|
||||
->rename('kg_point_gift_redeem')
|
||||
->save();
|
||||
}
|
||||
}
|
||||
|
||||
protected function handlePointHistory()
|
||||
{
|
||||
$rows = $this->getQueryBuilder()
|
||||
->select('*')
|
||||
->from('kg_point_history')
|
||||
->whereInList('event_type', [2, 3])
|
||||
->execute()->fetchAll(PDO::FETCH_ASSOC);
|
||||
|
||||
if (empty($rows)) return;
|
||||
|
||||
foreach ($rows as $row) {
|
||||
$eventInfo = json_decode($row['event_info'], true);
|
||||
$newEventInfo = json_encode([
|
||||
'point_gift_redeem' => $eventInfo['point_redeem']
|
||||
]);
|
||||
$this->getQueryBuilder()
|
||||
->update('kg_point_history')
|
||||
->set('event_info', $newEventInfo)
|
||||
->where(['id' => $row['id']])
|
||||
->execute();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -926,12 +926,14 @@
|
||||
|
||||
.course-meta .cover {
|
||||
float: left;
|
||||
position: relative;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.course-meta .info {
|
||||
float: left;
|
||||
width: 560px;
|
||||
padding-top: 5px;
|
||||
}
|
||||
|
||||
.course-meta .rating {
|
||||
@ -940,12 +942,18 @@
|
||||
}
|
||||
|
||||
.course-meta p {
|
||||
line-height: 30px;
|
||||
line-height: 35px;
|
||||
}
|
||||
|
||||
.course-meta .cover img {
|
||||
width: 210px;
|
||||
height: 118px;
|
||||
width: 270px;
|
||||
height: 150px;
|
||||
}
|
||||
|
||||
.course-meta .cover .model {
|
||||
position: absolute;
|
||||
top: 15px;
|
||||
right: 15px;
|
||||
}
|
||||
|
||||
.course-meta .info .key {
|
||||
@ -2287,26 +2295,30 @@
|
||||
|
||||
.gift-meta .cover {
|
||||
float: left;
|
||||
position: relative;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.gift-meta .cover .type {
|
||||
position: absolute;
|
||||
top: 15px;
|
||||
right: 15px;
|
||||
}
|
||||
|
||||
.gift-meta .cover img {
|
||||
width: 210px;
|
||||
height: 118px;
|
||||
width: 270px;
|
||||
height: 150px;
|
||||
}
|
||||
|
||||
.gift-meta .info {
|
||||
float: left;
|
||||
padding-top: 5px;
|
||||
}
|
||||
|
||||
.gift-meta .info p {
|
||||
line-height: 35px;
|
||||
}
|
||||
|
||||
.gift-meta .info .stats {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.gift-meta .info span {
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
@ -5,16 +5,14 @@ layui.use(['jquery', 'layer'], function () {
|
||||
|
||||
$('.btn-redeem').on('click', function () {
|
||||
var url = $(this).data('url');
|
||||
var data = {gift_id: $(this).data('id')};
|
||||
layer.confirm('兑换不支持退换,确定要兑换该物品吗?', function () {
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: url,
|
||||
data: data,
|
||||
success: function (res) {
|
||||
layer.msg(res.msg, {icon: 1});
|
||||
setTimeout(function () {
|
||||
window.location.href = '/uc/point/redeems';
|
||||
window.location.href = '/uc/point/gift/redeems';
|
||||
}, 3000);
|
||||
}
|
||||
});
|
||||
|
Loading…
x
Reference in New Issue
Block a user