6
0
Fork 0

添加订单部分接口

release
vine_liutk 2022-01-14 17:55:09 +08:00 committed by 李静
parent 72ecc15f66
commit adb4c9f5ba
11 changed files with 279 additions and 28 deletions

View File

@ -32,6 +32,7 @@ class DealerProductController extends AdminController
// $grid->column('images');
// $grid->column('description');
$grid->column('price')->prepend('¥');
$grid->column('manager_subsidy')->prepend('¥');
// $grid->column('stock');
// $grid->column('sales_count');
$grid->column('is_sale')->if(function () {
@ -123,7 +124,8 @@ class DealerProductController extends AdminController
->retainable()
->autoUpload();
$form->editor('description');
$form->currency('price')->symbol('¥');
$form->currency('price')->symbol('¥')->required();
$form->currency('manager_subsidy')->symbol('¥')->required();
// $form->text('stock');
// $form->text('sales_count');
$form->switch('is_sale');

View File

@ -209,7 +209,7 @@ class WalletController extends Controller
throw new BizException('可提账户已被限制提现');
}
// todo-校验提现门槛
// 校验提现门槛
if (bcdiv($amount, 100, 2) < app_settings('withdraw.threshold_amount', 0)) {
throw new BizException('提现金额需大于'.app_settings('withdraw.threshold_amount', 0).'元');
}

View File

@ -100,4 +100,77 @@ class OrderController extends Controller
'total_amount'=> $orderService->totalAmount($request->user(), $product, $input['num']),
]);
}
/**
* 确认接单
*
* @param [type] $id
* @param Request $request
* @return void
*/
public function confirmOrder($id, Request $request, OrderService $orderService)
{
$order = DealerOrder::findOrFail($id);
$userId = $request->user()->id;
//不是发货人
if (!$order->isConsignor($userId)) {
throw new BizException('订单未找到');
}
$orderService->confirmOrder($order);
return response()->noContent();
}
/**
* 确认打款
*
* @return void
*/
public function payOrder($id, Request $request, OrderService $orderService)
{
$order = DealerOrder::findOrFail($id);
$userId = $request->user()->id;
//不是发货人
if (!$order->isUser($userId)) {
throw new BizException('订单未找到');
}
$input = $request->validate([
'pay_image' => ['bail', 'required', 'string'],
]);
$orderService->payOrder($order, $input['pay_image']);
return response()->noContent();
}
/**
* 确认收款+发货
*
* @return void
*/
public function paidOrder($id, Request $request, OrderService $orderService)
{
return response()->noContent();
}
/**
* 确认收货
*
* @return void
*/
public function shippingedOrder($id, Request $request)
{
return response()->noContent();
}
/**
* 取消订单
*
* @param [type] $id
* @param Request $request
* @return void
*/
public function cancelOrder($id, Request $request)
{
return response()->noContent();
}
}

View File

@ -15,14 +15,19 @@ class OrderResource extends JsonResource
public function toArray($request)
{
return [
'id' => $this->id,
'sn' =>$this->sn,
'product'=>OrderProductResource::collection($this->products),
'total_amount' => $this->total_amount,
'created_at' => $this->created_at->toDateTimeString(),
'status' => $this->status,
'pay_info' => $this->pay_info??$this->consignor->dealer->pay_info,
'pay_info' => $this->getConsignorPayInfo(),
'pay_image'=> $this->pay_image,
'is_consignor' => $request->user()->id == $this->consignor_id, //是否发货人身份
'consignee_name'=>$this->consignee_name,
'consignee_telephone'=>$this->consignee_telephone,
'consignee_zone' => $this->consignee_zone,
'consignee_address' => $this->consignee_address,
];
}
}

View File

@ -15,6 +15,7 @@ class OrderSimpleResource extends JsonResource
public function toArray($request)
{
return [
'id' => $this->id,
'sn' =>$this->sn,
'total_amount' => $this->total_amount,
'created_at' => $this->created_at->toDateTimeString(),

View File

@ -231,5 +231,14 @@ Route::group([
Route::post('orders', [Dealer\OrderController::class, 'store']);
//订单详情
Route::get('orders/{order}', [Dealer\OrderController::class, 'show']);
//确认接单
Route::post('orders/{order}/confirm', [Dealer\OrderController::class, 'confirmOrder']);
//确认打款
Route::post('orders/{order}/pay', [Dealer\OrderController::class, 'payOrder']);
//确认收款
Route::post('orders/{order}/paid', [Dealer\OrderController::class, 'paidOrder']);
//确认收货
Route::post('orders/{order}/shippinged', [Dealer\OrderController::class, 'shippingedOrder']);
});
});

View File

@ -3,11 +3,11 @@
namespace App\Enums;
enum DealerOrderStatus: int {
case Pending = 0;
case Paying = 1;
case Confirming = 2;
case Paid = 3;
case Shipped = 4;
case Completed = 5;
case Cancelled = 9;
case Pending = 0; // 待确认
case Paying = 1; // 已确认 待付款
case Confirming = 2; // 已付款 待收款
case Paid = 3; // 已收款 待发货
case Shipped = 4; // 已发货 待收货
case Completed = 9; // 已完成
case Cancelled = 10; // 已取消
}

View File

@ -14,17 +14,6 @@ class DealerOrder extends Model
use Filterable;
use HasDateTimeFormatter;
/**
* 订单状态
*/
public const STATUS_PENDING = 0; // 待确认
public const STATUS_PENDINGED = 1; // 已确认 待付款
public const STATUS_PAY = 2; // 已付款 待收款
public const STATUS_PAID = 3; // 已收款 待发货
public const STATUS_SHIPPING = 4; // 已发货 待收货
public const STATUS_COMPLETED = 9; // 已完成
public const STATUS_CANCELLED = 10; // 已取消
protected $attributes = [
'status' => DealerOrderStatus::Pending,
'settle_state' => DealerOrderSettleState::Pending,
@ -34,6 +23,26 @@ class DealerOrder extends Model
'status' => DealerOrderStatus::class,
'settle_state' => DealerOrderSettleState::class,
'pay_info'=>JsonArray::class,
'pay_time'=> 'datetime',
'paied_time'=>'datetime',
'shipping_time'=>'datetime',
'shippinged_time'=>'datetime',
];
protected $fillable = [
'status',
'pay_info',
'pay_image',
'consignor_id',
'settle_state',
'consignee_name',
'consignee_telephone',
'consignee_zone',
'consignee_address',
'pay_time',
'paied_time',
'shipping_time',
'shippinged_time',
];
/**
@ -41,7 +50,7 @@ class DealerOrder extends Model
*/
public function scopeOnlyPending($query)
{
return $query->where('status', static::STATUS_PENDING);
return $query->where('status', DealerOrderStatus::Pending);
}
/**
@ -49,15 +58,15 @@ class DealerOrder extends Model
*/
public function scopeOnlyPendinged($query)
{
return $query->where('status', static::STATUS_PENDINGED);
return $query->where('status', DealerOrderStatus::Paying);
}
/**
* 已收款/待发货
* 待收款+待发货
*/
public function scopeOnlyPaid($query)
{
return $query->where('status', static::STATUS_PAID);
return $query->where('status', DealerOrderStatus::Confirming);
}
/**
@ -65,7 +74,7 @@ class DealerOrder extends Model
*/
public function scopeOnlyShipping($query)
{
return $query->where('status', static::STATUS_SHIPPING);
return $query->where('status', DealerOrderStatus::Shipped);
}
/**
@ -73,7 +82,7 @@ class DealerOrder extends Model
*/
public function scopeOnlyCompleted($query)
{
return $query->where('status', static::STATUS_COMPLETED);
return $query->where('status', DealerOrderStatus::Completed);
}
/**
@ -81,7 +90,7 @@ class DealerOrder extends Model
*/
public function scopeOnlyCancelled($query)
{
return $query->where('status', static::STATUS_CANCELLED);
return $query->where('status', DealerOrderStatus::Cancelled);
}
/**
@ -120,8 +129,81 @@ class DealerOrder extends Model
return $this->consignor_id == $userId;
}
/**
* 是否待确认订单
*
* @return boolean
*/
public function isPending()
{
return $this->status == DealerOrderStatus::Pending;
}
/**
* 是否待打款订单
*
* @return boolean
*/
public function isPendinged()
{
return $this->status == DealerOrderStatus::Paying;
}
/**
* 是待确认打款订单
*
* @return boolean
*/
public function isPay()
{
return $this->status == DealerOrderStatus::Confirming;
}
/**
* 是否待收货订单
*
* @return boolean
*/
public function isShipping()
{
return $this->status == DealerOrderStatus::Shipped;
}
/**
* 是否已取消
*
* @return boolean
*/
public function isCancelled()
{
return $this->status == DealerOrderStatus::Cancelled;
}
public function canCurd($userId)
{
return $this->isUser($userId) || $this->isConsignor($userId);
}
/**
* 获取发货人的打款信息
*
* @return void
*/
public function getConsignorPayInfo()
{
if ($this->isPendinged()) {//待打款订单显示发货人收款信息
if ($this->consignor?->dealer) {
$payInfo = $this->consignor->dealer->pay_info;
} else {
$payInfo = [
//todo-公司的收款信息
];
}
} elseif ($this->isPending() || $this->isCancelled()) {//如果是已取消订单或者待确认订单不显示收款信息
$payInfo = [];
} else {
$payInfo = $this->pay_info;
}
return $payInfo;
}
}

View File

@ -3,6 +3,7 @@
namespace App\Services\Dealer;
use App\Enums\DealerLvl;
use App\Enums\DealerOrderStatus;
use App\Exceptions\BizException;
use App\Models\DealerOrder;
use App\Models\DealerProduct;
@ -47,6 +48,15 @@ class OrderService
return bcmul($salePrice, $number, 2);
}
/**
* 创建订单
*
* @param User $user
* @param DealerProduct $product
* @param integer $number
* @param integer $shippingAddressId
* @return DealerOrder $order
*/
public function createOrder(User $user, DealerProduct $product, int $number = 0, int $shippingAddressId)
{
//判断是否满足当前等级最低补货价
@ -99,6 +109,40 @@ class OrderService
return $order;
}
/**
* 确认接单
*
* @param DealerOrder $order
* @return void
*/
public function confirmOrder(DealerOrder $order)
{
if (!$order->isPending()) {
throw new BizException('订单状态异常,请刷新后再试');
}
$order->update([
'status' => DealerOrderStatus::Paying,
]);
}
/**
* 确认打款
*
* @return void
*/
public function payOrder(DealerOrder $order, string $payImage)
{
if (!$order->isPendinged()) {
throw new BizException('订单状态异常,请刷新后再试');
}
$order->update([
'status' => DealerOrderStatus::Confirming,
'pay_image' => $payImage,
'pay_info' => $order->getConsignorPayInfo()??null,
'pay_time' => now(),
]);
}
/**
* 更新订单发货人
*

View File

@ -0,0 +1,34 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddManagerSubsidyToDealerProductsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('dealer_products', function (Blueprint $table) {
//
$table->unsignedDecimal('manager_subsidy')->default(0.00)->comment('管理者津贴');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('dealer_products', function (Blueprint $table) {
//
$table->dropColumn(['manager_subsidy']);
});
}
}

View File

@ -12,6 +12,7 @@ return [
'images' => '商品图片',
'description' => '商品详情',
'price' => '销售价格',
'manager_subsidy'=>'管理者津贴',
'stock' => '库存',
'sales_count' => '销量',
'is_sale' => '是否在售',