From 07ac327982912fe4a0656ecdf82bb59c25f7dbb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=9D=99?= Date: Mon, 21 Feb 2022 10:11:25 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E5=B0=86=E8=AE=A2=E5=8D=95=E6=A0=87?= =?UTF-8?q?=E8=AE=B02=E5=BE=85=E4=BB=98=E6=AC=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Admin/Actions/Grid/DealerOrderRefuse.php | 74 +++++++++++++++++++ .../Controllers/DealerOrderController.php | 6 ++ database/seeders/AdminPermissionSeeder.php | 1 + 3 files changed, 81 insertions(+) create mode 100644 app/Admin/Actions/Grid/DealerOrderRefuse.php diff --git a/app/Admin/Actions/Grid/DealerOrderRefuse.php b/app/Admin/Actions/Grid/DealerOrderRefuse.php new file mode 100644 index 00000000..f768c386 --- /dev/null +++ b/app/Admin/Actions/Grid/DealerOrderRefuse.php @@ -0,0 +1,74 @@ +title) { + return $this->title; + } + + return ' 拒绝收款   '; + } + + /** + * @param Model|Authenticatable|HasPermissions|null $user + * + * @return bool + */ + protected function authorize($user): bool + { + return $user->can('dcat.admin.dealer_orders.paid'); + } + + /** + * Handle the action request. + * + * @param Request $request + * + * @return Response + */ + public function handle(Request $request) + { + try { + DB::beginTransaction(); + + $order = DealerOrder::lockForUpdate()->findOrFail($this->getKey()); + + if (! $order->isPay()) { + throw new BizException('无法收款:订单状态异常,请刷新后再试'); + } + + $order->update([ + 'status' => DealerOrderStatus::Paying, + 'pay_time' => null, + ]); + + DB::commit(); + } catch (Throwable $th) { + DB::rollBack(); + report($th); + return $this->response()->error('操作失败,'.$th->getMessage())->refresh(); + } + + return $this->response()->success('操作成功')->refresh(); + } + + /** + * @return string|array|void + */ + public function confirm() + { + return ['确认未收到此订单货款?', '确认后将无法逆操作']; + } +} diff --git a/app/Admin/Controllers/DealerOrderController.php b/app/Admin/Controllers/DealerOrderController.php index 2f0d7b93..78886896 100644 --- a/app/Admin/Controllers/DealerOrderController.php +++ b/app/Admin/Controllers/DealerOrderController.php @@ -5,6 +5,7 @@ namespace App\Admin\Controllers; use App\Admin\Actions\Grid\DealerOrderAllocate; use App\Admin\Actions\Grid\DealerOrderCancel; use App\Admin\Actions\Grid\DealerOrderPaid; +use App\Admin\Actions\Grid\DealerOrderRefuse; use App\Admin\Actions\Grid\DealerOrderShipping; use App\Admin\Actions\Show\DealerOrderRemark; use App\Admin\Repositories\DealerOrder; @@ -90,6 +91,11 @@ class DealerOrderController extends AdminController if ($actions->row->isPay() && Admin::user()->can('dcat.admin.dealer_orders.paid')) { $actions->append(new DealerOrderPaid()); } + + if ($actions->row->isPay() && Admin::user()->can('dcat.admin.dealer_orders.refuse')) { + $actions->append(new DealerOrderRefuse()); + } + if ($actions->row->isPaid() && Admin::user()->can('dcat.admin.dealer_orders.shipping')) { $actions->append(new DealerOrderShipping()); } diff --git a/database/seeders/AdminPermissionSeeder.php b/database/seeders/AdminPermissionSeeder.php index 7d479f8e..54fdfa66 100644 --- a/database/seeders/AdminPermissionSeeder.php +++ b/database/seeders/AdminPermissionSeeder.php @@ -330,6 +330,7 @@ class AdminPermissionSeeder extends Seeder 'curd' => ['index', 'show'], 'children' =>[ 'paid'=>['name' =>'确认收款'], + 'refuse'=>['name' =>'拒绝收款'], 'shipping'=>['name' =>'确认发货'], 'allocate'=>['name' =>'自动分配'], 'manager'=>['name' =>'系统订单'], From 0e53eb73d3372d27f3ede2cdf5701d19c8defbb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=9D=99?= Date: Mon, 21 Feb 2022 15:41:10 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E6=8B=92=E7=BB=9D=E6=94=B6=E6=AC=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Admin/Actions/Grid/DealerOrderRefuse.php | 71 +++------------- app/Admin/Forms/DealerOrderRefuse.php | 80 +++++++++++++++++++ .../Controllers/Dealer/OrderController.php | 7 +- app/Models/DealerOrder.php | 5 ++ app/Models/DealerOrderRefuseLog.php | 16 ++++ ..._create_dealer_order_refuse_logs_table.php | 35 ++++++++ 6 files changed, 151 insertions(+), 63 deletions(-) create mode 100644 app/Admin/Forms/DealerOrderRefuse.php create mode 100644 app/Models/DealerOrderRefuseLog.php create mode 100644 database/migrations/2022_02_21_153159_create_dealer_order_refuse_logs_table.php diff --git a/app/Admin/Actions/Grid/DealerOrderRefuse.php b/app/Admin/Actions/Grid/DealerOrderRefuse.php index f768c386..1b186e2a 100644 --- a/app/Admin/Actions/Grid/DealerOrderRefuse.php +++ b/app/Admin/Actions/Grid/DealerOrderRefuse.php @@ -2,73 +2,20 @@ namespace App\Admin\Actions\Grid; -use App\Enums\DealerOrderStatus; -use App\Exceptions\BizException; -use App\Models\DealerOrder; +use App\Admin\Forms\DealerOrderRefuse as DealerOrderRefuseForm; use Dcat\Admin\Grid\RowAction; -use Illuminate\Http\Request; -use Illuminate\Support\Facades\DB; -use Throwable; +use Dcat\Admin\Widgets\Modal; class DealerOrderRefuse extends RowAction { - public function title() + public function render() { - if ($this->title) { - return $this->title; - } + $form = DealerOrderRefuseForm::make()->payload(['id' => $this->getKey()]); - return ' 拒绝收款   '; - } - - /** - * @param Model|Authenticatable|HasPermissions|null $user - * - * @return bool - */ - protected function authorize($user): bool - { - return $user->can('dcat.admin.dealer_orders.paid'); - } - - /** - * Handle the action request. - * - * @param Request $request - * - * @return Response - */ - public function handle(Request $request) - { - try { - DB::beginTransaction(); - - $order = DealerOrder::lockForUpdate()->findOrFail($this->getKey()); - - if (! $order->isPay()) { - throw new BizException('无法收款:订单状态异常,请刷新后再试'); - } - - $order->update([ - 'status' => DealerOrderStatus::Paying, - 'pay_time' => null, - ]); - - DB::commit(); - } catch (Throwable $th) { - DB::rollBack(); - report($th); - return $this->response()->error('操作失败,'.$th->getMessage())->refresh(); - } - - return $this->response()->success('操作成功')->refresh(); - } - - /** - * @return string|array|void - */ - public function confirm() - { - return ['确认未收到此订单货款?', '确认后将无法逆操作']; + return Modal::make() + ->lg() + ->title('拒绝收款') + ->body($form) + ->button(' 拒绝收款   '); } } diff --git a/app/Admin/Forms/DealerOrderRefuse.php b/app/Admin/Forms/DealerOrderRefuse.php new file mode 100644 index 00000000..9eef199f --- /dev/null +++ b/app/Admin/Forms/DealerOrderRefuse.php @@ -0,0 +1,80 @@ +payload['id'] ?? null; + + DB::beginTransaction(); + + $order = DealerOrder::lockForUpdate()->findOrFail($id); + + if (! $order->isPay()) { + throw new BizException('无法收款:订单状态异常,请刷新后再试'); + } + + $order->update([ + 'status' => DealerOrderStatus::Paying, + 'pay_time' => null, + ]); + + $order->refuseLogs()->create([ + 'reason' => $input['reason'], + ]); + + DB::commit(); + } catch (Throwable $e) { + DB::rollBack(); + + report($e); + + return $this->response()->error('操作失败,'.$e->getMessage())->refresh(); + } + + return $this + ->response() + ->success('操作成功') + ->refresh(); + } + + /** + * Build a form here. + */ + public function form() + { + $this->textarea('reason', '原因')->rules('required|max:255'); + } + + /** + * The data of the form. + * + * @return array + */ + public function default() + { + return [ + 'reason' => '', + ]; + } +} diff --git a/app/Endpoint/Api/Http/Controllers/Dealer/OrderController.php b/app/Endpoint/Api/Http/Controllers/Dealer/OrderController.php index 86bffd74..89deefdd 100644 --- a/app/Endpoint/Api/Http/Controllers/Dealer/OrderController.php +++ b/app/Endpoint/Api/Http/Controllers/Dealer/OrderController.php @@ -158,7 +158,12 @@ class OrderController extends Controller throw new BizException('订单未找到'); } - return OrderResource::make($order); + $refuseLog = $order->isPendinged() ? $order->refuseLogs()->latest('id')->first() : null; + + $data = OrderResource::make($order)->toArray($request); + $data['refuse_reason'] = $refuseLog?->reason; + + return response()->json($data); } /** diff --git a/app/Models/DealerOrder.php b/app/Models/DealerOrder.php index 8af27bef..3fa31eda 100644 --- a/app/Models/DealerOrder.php +++ b/app/Models/DealerOrder.php @@ -164,6 +164,11 @@ class DealerOrder extends Model return $this->belongsTo(User::class, 'consignor_id'); } + public function refuseLogs() + { + return $this->hasMany(DealerOrderRefuseLog::class, 'order_id'); + } + public function isUser($userId) { return $this->user_id == $userId; diff --git a/app/Models/DealerOrderRefuseLog.php b/app/Models/DealerOrderRefuseLog.php new file mode 100644 index 00000000..6a475d69 --- /dev/null +++ b/app/Models/DealerOrderRefuseLog.php @@ -0,0 +1,16 @@ +id(); + $table->unsignedBigInteger('order_id'); + $table->string('reason')->nullable()->comment('原因'); + $table->timestamps(); + + $table->index('order_id'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('dealer_order_refuse_logs'); + } +} From e3c5ce45dc9294420d5596eb84e95aba8bb69553 Mon Sep 17 00:00:00 2001 From: vine_liutk <961510893@qq.com> Date: Fri, 18 Feb 2022 16:29:49 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=89=B9=E9=9B=B6?= =?UTF-8?q?=E6=8F=90=E7=8E=B0=E5=88=B0=E9=93=B6=E8=A1=8C=E5=8D=A1=E9=9C=80?= =?UTF-8?q?=E8=A6=81=E6=94=AF=E4=BB=98=E5=AF=86=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Http/Controllers/Dealer/WalletController.php | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/app/Endpoint/Api/Http/Controllers/Dealer/WalletController.php b/app/Endpoint/Api/Http/Controllers/Dealer/WalletController.php index 1c87dfcb..f3645260 100644 --- a/app/Endpoint/Api/Http/Controllers/Dealer/WalletController.php +++ b/app/Endpoint/Api/Http/Controllers/Dealer/WalletController.php @@ -8,6 +8,7 @@ use App\Endpoint\Api\Http\Resources\Dealer\WalletToBankLogResource; use App\Endpoint\Api\Http\Resources\Dealer\WalletToBankLogSimpleResource; use App\Enums\DealerWalletAction; use App\Exceptions\BizException; +use App\Exceptions\PayPasswordIncorrectException; use App\Helpers\Paginator as PaginatorHelper; use App\Models\DealerWalletToBankLog; use App\Services\Dealer\WalletService; @@ -41,10 +42,18 @@ class WalletController extends Controller { $input = $request->validate([ 'amount' => ['bail', 'required', 'int', 'min:1'], + 'pay_password' => ['bail', 'required', 'string'], + ], [], [ + 'amount' => '提现金额', + 'pay_password' => '支付密码', ]); $user = $request->user(); $amount = Arr::get($input, 'amount', 0); + //验证支付密码 + if (! $user->wallet?->verifyPassword($input['pay_password'] ?? '')) { + throw new PayPasswordIncorrectException(); + } if (empty($user->dealer->pay_info)) { throw new BizException('请先绑定设置收款信息'); @@ -69,7 +78,7 @@ class WalletController extends Controller $rate = app_settings('dealer.withdraw_fee_rate', '0.00');//手续费率 // $rate = 0; //计算手续费(四舍五入) - $serviceAmount = round(bcdiv($rate, 100, 4)*$amount); + $serviceAmount = round(bcdiv($rate, 100, 4) * $amount); //生成提现记录 $log = DealerWalletToBankLog::create([ @@ -77,7 +86,7 @@ class WalletController extends Controller 'amount'=> bcdiv($amount, 100, 2), 'rate' => $rate, 'service_amount' => bcdiv($serviceAmount, 100, 2), - 'account_amount' => bcdiv($amount-$serviceAmount, 100, 2), + 'account_amount' => bcdiv($amount - $serviceAmount, 100, 2), ]); //减去用户可提金额