From e0a48ac08dbbf94859a9d34ed60abf4c87a0a296 Mon Sep 17 00:00:00 2001
From: panliang <1163816051@qq.com>
Date: Sat, 25 Feb 2023 10:01:29 +0800
Subject: [PATCH] vip
---
.../Controllers/Store/DeskController.php | 13 +++-------
.../Controllers/Store/ProductController.php | 22 +++++++---------
.../Controllers/Store/StoreController.php | 2 +-
app/Admin/Services/OrderService.php | 5 +++-
app/Endpoint/Api/Filters/ProductSkuFilter.php | 26 ++++++++++---------
.../Http/Resources/OrderProductResource.php | 1 +
app/Models/Store/Desk.php | 4 +++
app/Models/Store/Store.php | 6 ++++-
app/Services/VipService.php | 14 ++++++++--
9 files changed, 53 insertions(+), 40 deletions(-)
diff --git a/app/Admin/Controllers/Store/DeskController.php b/app/Admin/Controllers/Store/DeskController.php
index e8916f22..7162ec8b 100644
--- a/app/Admin/Controllers/Store/DeskController.php
+++ b/app/Admin/Controllers/Store/DeskController.php
@@ -19,7 +19,7 @@ class DeskController extends AdminController
$grid->column('id');
$grid->column('store_id')->display(fn() => data_get($this->store, 'title'));
$grid->column('name');
- // $grid->column('status')->switch();
+ $grid->column('status')->switch();
$grid->column('wxcode')->image('', 100, 100);
$grid->column('remarks')->editable();
@@ -45,7 +45,7 @@ class DeskController extends AdminController
return Form::make(new Desk(), function (Form $form) {
$form->select('store_id')->options(Store::pluck('title', 'id'))->required();
$form->text('name')->required();
- // $form->switch('status')->default(1);
+ $form->switch('status')->default(1);
$form->text('remarks');
$form->embeds('extra', function (Form\EmbeddedForm $form) {
@@ -56,13 +56,6 @@ class DeskController extends AdminController
$form->disableEditingCheck();
$form->disableDeleteButton();
$form->disableResetButton();
-
- $form->saved(function (Form $form, $result) {
- // 新增桌号, 生成小程序码
- if ($form->isCreating()) {
-
- }
- });
});
}
@@ -72,7 +65,7 @@ class DeskController extends AdminController
$show->field('id');
$show->field('store_id')->as(fn() => data_get($this->store, 'name'));
$show->field('name');
- // $show->field('status')->bool();
+ $show->field('status')->bool();
$show->field('wxcode');
$show->field('remarks');
diff --git a/app/Admin/Controllers/Store/ProductController.php b/app/Admin/Controllers/Store/ProductController.php
index ac4bbcc4..ce4fd2f6 100644
--- a/app/Admin/Controllers/Store/ProductController.php
+++ b/app/Admin/Controllers/Store/ProductController.php
@@ -53,27 +53,23 @@ class ProductController extends AdminController
$grid->column('store.title', '店铺');
$grid->column('productSku.category.name', '分类');
$grid->column('productSku.name', '名称');
+ $grid->column('productSku.sell_price', '销售价')->display(fn ($value) => bcdiv($value, 100, 2));
$grid->column('productSku.specs', '规格')->label();
- $grid->column('productSku.cost_price', '成本价')->display(function ($value) {
- return bcdiv($value, 100, 2);
- });
- $grid->column('productSku.sell_price', '销售价')->display(function ($value) {
- return bcdiv($value, 100, 2);
- });
- $grid->column('amount', '库存');
+ $grid->column('productSku.cost_price', '成本价')->display(fn ($value) => bcdiv($value, 100, 2));
$grid->column('profit', '毛利')->display(function () {
$sell_price = data_get($this->productSku, 'sell_price');
$cost_price = data_get($this->productSku, 'cost_price');
return round(($sell_price - $cost_price) / 100, 2, PHP_ROUND_HALF_DOWN);
});
- $grid->column('cost', '总成本')->display(function () {
- $cost_price = data_get($this->productSku, 'cost_price');
- return round($cost_price / 100 * $this->amount, 2, PHP_ROUND_HALF_DOWN);
- });
+ $grid->column('amount', '库存');
$grid->column('sell', '总销售')->display(function () {
$sell_price = data_get($this->productSku, 'sell_price');
return round($sell_price / 100 * $this->amount, 2, PHP_ROUND_HALF_DOWN);
});
+ $grid->column('cost', '总成本')->display(function () {
+ $cost_price = data_get($this->productSku, 'cost_price');
+ return round($cost_price / 100 * $this->amount, 2, PHP_ROUND_HALF_DOWN);
+ });
$grid->column('status', '状态')->switch();
$grid->paginate(10);
@@ -117,11 +113,11 @@ class ProductController extends AdminController
| 统计 |
总数: $count |
- 成本价: $cost_price |
销售价: $sell_price |
+ 成本价: $cost_price |
库存: $stock |
- 总成本: $cost |
总销售: $sell |
+ 总成本: $cost |
diff --git a/app/Admin/Controllers/Store/StoreController.php b/app/Admin/Controllers/Store/StoreController.php
index c9ecfa83..d6158f4c 100644
--- a/app/Admin/Controllers/Store/StoreController.php
+++ b/app/Admin/Controllers/Store/StoreController.php
@@ -98,7 +98,7 @@ class StoreController extends AdminController
$show->field('remarks');
$show->field('created_at');
- $show->field('order_desk_print_template')->as(fn() => data_get($this->extra, 'order_desk_print_template'));
+ $show->field('order_desk_print_template')->as(fn() => data_get($info->extra, 'order_desk_print_template'));
$show->tools(function (Tools $tools) {
$tools->append(new ExportGoodsSpu());
diff --git a/app/Admin/Services/OrderService.php b/app/Admin/Services/OrderService.php
index 9d185a42..d67a45ce 100644
--- a/app/Admin/Services/OrderService.php
+++ b/app/Admin/Services/OrderService.php
@@ -53,8 +53,11 @@ class OrderService
}
$newTotalAmount = $reduceOrderProduct->total_amount + $reduceOrderProduct->reduced_amount - $amount;
+ if ($newTotalAmount < 0) {
+ $newTotalAmount = 0;
+ }
- //更新订单商品的金额
+ // 更新订单商品的金额
$reduceOrderProduct->update([
'reduced_amount' => $amount,
'total_amount'=> $newTotalAmount,
diff --git a/app/Endpoint/Api/Filters/ProductSkuFilter.php b/app/Endpoint/Api/Filters/ProductSkuFilter.php
index ebe3ed2f..b4ccbfe2 100644
--- a/app/Endpoint/Api/Filters/ProductSkuFilter.php
+++ b/app/Endpoint/Api/Filters/ProductSkuFilter.php
@@ -14,18 +14,20 @@ class ProductSkuFilter extends ModelFilter
*/
public function category($id)
{
- $category = ProductCategory::showable()->find($id);
-
- if ($category === null) {
- return $this->whereRaw('1=0');
- }
-
- $ids = $category->descendants()->showable()->pluck('id');
-
- if ($ids->isEmpty()) {
- $this->where('category_id', $id);
- } else {
- $this->whereIn('category_id', $ids);
+ if ($id > 0) {
+ $category = ProductCategory::showable()->find($id);
+
+ if ($category === null) {
+ return $this->whereRaw('1=0');
+ }
+
+ $ids = $category->descendants()->showable()->pluck('id');
+
+ if ($ids->isEmpty()) {
+ $this->where('category_id', $id);
+ } else {
+ $this->whereIn('category_id', $ids);
+ }
}
}
diff --git a/app/Endpoint/Api/Http/Resources/OrderProductResource.php b/app/Endpoint/Api/Http/Resources/OrderProductResource.php
index eef23419..a3ede029 100644
--- a/app/Endpoint/Api/Http/Resources/OrderProductResource.php
+++ b/app/Endpoint/Api/Http/Resources/OrderProductResource.php
@@ -17,6 +17,7 @@ class OrderProductResource extends JsonResource
return [
'id' => $this->id,
'sku_id' => $this->sku_id,
+ 'spu_id' => $this->spu_id,
'name' => $this->name,
'cover' => $this->cover,
'specs' => array_values((array) $this->specs),
diff --git a/app/Models/Store/Desk.php b/app/Models/Store/Desk.php
index d5324c26..30de9e95 100644
--- a/app/Models/Store/Desk.php
+++ b/app/Models/Store/Desk.php
@@ -15,6 +15,10 @@ class Desk extends Model
protected $fillable = ['extra', 'name', 'remarks', 'status', 'store_id', 'wxcode'];
+ protected $attributes = [
+ 'status' => 1
+ ];
+
protected $casts = [
'extra' => 'json'
];
diff --git a/app/Models/Store/Store.php b/app/Models/Store/Store.php
index f8efd42e..dedb5712 100644
--- a/app/Models/Store/Store.php
+++ b/app/Models/Store/Store.php
@@ -10,7 +10,11 @@ class Store extends Model
{
use HasFactory, HasDateTimeFormatter;
- protected $fillable = ['title', 'image'];
+ protected $fillable = ['title', 'image', 'extra'];
+
+ protected $casts = [
+ 'extra' => 'json'
+ ];
protected $attributes = [
'status' => 1,
diff --git a/app/Services/VipService.php b/app/Services/VipService.php
index 4f1e4bed..ea6c373c 100644
--- a/app/Services/VipService.php
+++ b/app/Services/VipService.php
@@ -42,6 +42,11 @@ class VipService
'pay_way' => $pay_way
]);
$money = $userVip->price;
+ if ($money <= 0) {
+ $this->success($userVip);
+ return ['status' => 1];
+ }
+
$debug = config('app.debug');
if ($debug) {
$money = 0.01;
@@ -63,7 +68,7 @@ class VipService
'trade_type' => WxpayTradeType::JSAPI->value,
'openid' => $openid,
];
- return ['pay_way' => $pay_way, 'data' => (new WxpayService())->pay($params)];
+ return ['pay_way' => $pay_way, 'data' => (new WxpayService())->pay($params), 'status' => 0];
}
throw new BizException('未知的支付方式');
}
@@ -80,7 +85,12 @@ class VipService
'success_time' => data_get($params, 'pay_at', now())
]);
$user = $userVip->user;
- $vip_expired = $this->convertTimes(data_get($userVip->times, 'num'), data_get($userVip->times, 'unit'), $user->vip_expired);
+ $success_time = $userVip->success_time;
+ $start = $user->vip_expired;
+ if ($success_time->gt($start)) {
+ $start = $success_time;
+ }
+ $vip_expired = $this->convertTimes(data_get($userVip->times, 'num'), data_get($userVip->times, 'unit'), $start);
$userVip->update([
'expired' => $vip_expired
]);