diff --git a/CHANGELOG.md b/CHANGELOG.md index 6cb084df..60350d56 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,17 @@ +### [v1.2.8](https://gitee.com/koogua/course-tencent-cloud/releases/v1.2.8)(2021-03-08) + +### 更新 + +- 数据库迁移脚本整理 +- 数据表软删除字段整理 +- 微信公众号路由整理 +- 退款增加手续费逻辑 +- 课程增加不支持退款逻辑 +- 会员价格和期限可通过后台配置 +- 修复IM通知中字段重命名导致的问题 +- 修复购买会员会员标识未改变的问题 +- 会员中心订单列表样式调整 + ### [v1.2.7](https://gitee.com/koogua/course-tencent-cloud/releases/v1.2.7)(2021-02-26) ### 新增 diff --git a/app/Console/Tasks/RefundTask.php b/app/Console/Tasks/RefundTask.php index 1a3556ff..c85f3ba9 100644 --- a/app/Console/Tasks/RefundTask.php +++ b/app/Console/Tasks/RefundTask.php @@ -39,8 +39,8 @@ class RefundTask extends Task $itemInfo = $task->item_info; $refund = $refundRepo->findById($itemInfo['refund']['id']); - $trade = $tradeRepo->findById($itemInfo['refund']['trade_id']); - $order = $orderRepo->findById($itemInfo['refund']['order_id']); + $trade = $tradeRepo->findById($refund->trade_id); + $order = $orderRepo->findById($refund->order_id); if (!$refund || !$trade || !$order) { $task->status = TaskModel::STATUS_FAILED; diff --git a/app/Http/Admin/Controllers/SettingController.php b/app/Http/Admin/Controllers/SettingController.php index 1a79a60e..cae94452 100644 --- a/app/Http/Admin/Controllers/SettingController.php +++ b/app/Http/Admin/Controllers/SettingController.php @@ -282,7 +282,7 @@ class SettingController extends Controller if ($this->request->isPost()) { - $data = $this->request->getPost('vip', 'string'); + $data = $this->request->getPost('vip'); $settingService->updateVipSettings($data); @@ -290,9 +290,9 @@ class SettingController extends Controller } else { - $vips = $settingService->getVipSettings(); + $items = $settingService->getVipSettings(); - $this->view->setVar('vips', $vips); + $this->view->setVar('items', $items); } } diff --git a/app/Http/Admin/Controllers/TradeController.php b/app/Http/Admin/Controllers/TradeController.php index 2600351f..98d35538 100644 --- a/app/Http/Admin/Controllers/TradeController.php +++ b/app/Http/Admin/Controllers/TradeController.php @@ -3,6 +3,7 @@ namespace App\Http\Admin\Controllers; use App\Http\Admin\Services\Trade as TradeService; +use Phalcon\Mvc\View; /** * @RoutePrefix("/admin/trade") @@ -70,25 +71,26 @@ class TradeController extends Controller } /** - * @Post("/{id:[0-9]+}/refund", name="admin.trade.refund") + * @Route("/{id:[0-9]+}/refund", name="admin.trade.refund") */ public function refundAction($id) { $tradeService = new TradeService(); - $refund = $tradeService->refundTrade($id); + if ($this->request->isPost()) { - $location = $this->url->get([ - 'for' => 'admin.refund.show', - 'id' => $refund->id, - ]); + $tradeService->refundTrade($id); - $content = [ - 'location' => $location, - 'msg' => '申请退款成功', - ]; + return $this->jsonSuccess(['msg' => '提交申请成功']); + } - return $this->jsonSuccess($content); + $this->view->setRenderLevel(View::LEVEL_ACTION_VIEW); + + $trade = $tradeService->getTrade($id); + $confirm = $tradeService->confirmRefund($id); + + $this->view->setVar('trade', $trade); + $this->view->setVar('confirm', $confirm); } } diff --git a/app/Http/Admin/Services/Setting.php b/app/Http/Admin/Services/Setting.php index 5989b2ac..a1340246 100644 --- a/app/Http/Admin/Services/Setting.php +++ b/app/Http/Admin/Services/Setting.php @@ -91,7 +91,7 @@ class Setting extends Service { $vipRepo = new VipRepo(); - return $vipRepo->findAll(['deleted' => 0]); + return $vipRepo->findAll(); } public function getLiveSettings($section) @@ -198,9 +198,13 @@ class Setting extends Service { $vipRepo = new VipRepo(); - foreach ($items as $id => $price) { + foreach ($items as $id => $item) { $vip = $vipRepo->findById($id); - $vip->price = $price; + if (!$vip) continue; + $vip->title = sprintf('%s个月', $item['expiry']); + $vip->expiry = (int)$item['expiry']; + $vip->price = (float)$item['price']; + $vip->deleted = (int)$item['deleted']; $vip->update(); } } diff --git a/app/Http/Admin/Services/Trade.php b/app/Http/Admin/Services/Trade.php index 9b818a81..f1d576b3 100644 --- a/app/Http/Admin/Services/Trade.php +++ b/app/Http/Admin/Services/Trade.php @@ -10,6 +10,7 @@ use App\Repos\Account as AccountRepo; use App\Repos\Order as OrderRepo; use App\Repos\Trade as TradeRepo; use App\Repos\User as UserRepo; +use App\Validators\Refund as RefundValidator; use App\Validators\Trade as TradeValidator; class Trade extends Service @@ -93,22 +94,47 @@ class Trade extends Service return $accountRepo->findById($userId); } + public function confirmRefund($tradeId) + { + $trade = $this->findOrFail($tradeId); + + $orderRepo = new OrderRepo(); + + $order = $orderRepo->findById($trade->order_id); + + $refund = new \App\Services\Refund(); + + return $refund->preview($order); + } + public function refundTrade($id) { $trade = $this->findOrFail($id); + $user = $this->getLoginUser(); + + $post = $this->request->getPost(); + $validator = new TradeValidator(); $validator->checkIfAllowRefund($trade); + $validator = new RefundValidator(); + + $applyNote = $validator->checkApplyNote($post['apply_note']); + + $refundAmount = $validator->checkAmount($trade->amount, $post['refund_amount']); + + $applyNote = sprintf('%s - 操作员(%s)', $applyNote, $user->id); + $refund = new RefundModel(); + $refund->amount = $refundAmount; $refund->subject = $trade->subject; - $refund->amount = $trade->amount; $refund->owner_id = $trade->owner_id; $refund->order_id = $trade->order_id; $refund->trade_id = $trade->id; - $refund->apply_note = '后台人工申请退款'; + $refund->apply_note = $applyNote; $refund->create(); diff --git a/app/Http/Admin/Views/order/macro.volt b/app/Http/Admin/Views/order/macro.volt index 7aa625bc..6b6a4847 100644 --- a/app/Http/Admin/Views/order/macro.volt +++ b/app/Http/Admin/Views/order/macro.volt @@ -4,7 +4,7 @@
课程名称:{{ 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']) }}
+学习期限:{{ date('Y-m-d H:i:s',course['study_expiry_time']) }},退款期限:{% if course['refund_expiry'] > 0 %}{{ date('Y-m-d H:i:s',course['refund_expiry_time']) }}{% else %}不支持{% endif %}
课程名称:{{ 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']) }}
+学习期限:{{ date('Y-m-d H:i:s',course['study_expiry_time']) }},退款期限:{% if course['refund_expiry'] > 0 %}{{ date('Y-m-d H:i:s',course['refund_expiry_time']) }}{% else %}不支持{% endif %}
启用 | +期限 | +价格(元) | +
---|---|---|
+ + + | ++ + | ++ |
课程名称:{{ course.title }}
+退款期限:{{ date('Y-m-d H:i:s',course.refund_expiry_time) }} {{ expiry_flag }}
+退款金额:{{ '¥%0.2f'|format(course.refund_amount) }},退款比例:{{ 100 * course.refund_percent }}%
+课程名称:{{ course.title }}
+退款期限:{{ date('Y-m-d H:i:s',course.refund_expiry_time) }} {{ expiry_flag }}
+退款金额:{{ '¥%0.2f'|format(course.refund_amount) }},退款比例:{{ 100 * course.refund_percent }}%
+课程名称:{{ course.title }}
+赞赏金额:{{ '¥%0.2f'|format(reward.price) }}
+服务名称:会员服务({{ vip.title }})
+会员期限:{{ date('Y-m-d H:i:s',vip.expiry_time) }}
+服务名称:支付测试
+退款项目 | +支付金额 | +手续费({{ confirm.service_rate }}%) | +退款金额 | +
{{ item_info(confirm) }} | +{{ '¥%0.2f'|format(trade.amount) }} | +{{ '¥%0.2f'|format(confirm.service_fee) }} | +
+ {{ '¥%0.2f'|format(confirm.refund_amount) }}
+ |
+
学习期限{{ course.study_expiry }}个月 - 退款期限{{ course.refund_expiry }}天 + {% if course.refund_expiry > 0 %} + 退款期限{{ course.refund_expiry }}天 + {% else %} + 退款期限不支持 + {% endif %}
{%- endmacro %} diff --git a/app/Http/Home/Views/macros/order.volt b/app/Http/Home/Views/macros/order.volt index ed29ab31..8cab1c94 100644 --- a/app/Http/Home/Views/macros/order.volt +++ b/app/Http/Home/Views/macros/order.volt @@ -4,7 +4,7 @@课程名称:{{ 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) }}
+学习期限:{{ date('Y-m-d H:i:s',course.study_expiry_time) }}退款期限:{% if course.refund_expiry > 0 %}{{ date('Y-m-d H:i:s',course.refund_expiry_time) }}{% else %}不支持{% endif %}
课程名称:{{ 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) }}
+学习期限:{{ date('Y-m-d H:i:s',course.study_expiry_time) }}退款期限:{% if course.refund_expiry > 0 %}{{ date('Y-m-d H:i:s',course.refund_expiry_time) }}{% else %}不支持{% endif %}
- 原始价格 {{ '¥%0.2f'|format(course.origin_price) }} - 优惠价格 {{ '¥%0.2f'|format(course.market_price) }} - 会员价格 {{ '¥%0.2f'|format(course.vip_price) }} + 原始价格{{ '¥%0.2f'|format(course.origin_price) }} + 优惠价格{{ '¥%0.2f'|format(course.market_price) }} + 会员价格{{ '¥%0.2f'|format(course.vip_price) }}
- 学习期限 {{ course.study_expiry }}个月 - 退款期限 {{ course.refund_expiry }}天 + 学习期限{{ course.study_expiry }}个月 + {% if course.refund_expiry > 0 %} + 退款期限{{ course.refund_expiry }}天 + {% else %} + 退款期限不支持 + {% endif %}
订单金额:{{ '¥%0.2f'|format(order.amount) }}
diff --git a/app/Http/Home/Views/refund/confirm.volt b/app/Http/Home/Views/refund/confirm.volt
index c19683f9..44715192 100644
--- a/app/Http/Home/Views/refund/confirm.volt
+++ b/app/Http/Home/Views/refund/confirm.volt
@@ -24,29 +24,31 @@
{% endif %}
{%- endmacro %}
-
{% if confirm.refund_amount > 0 %} |