diff --git a/README.md b/README.md index a24fd6d..6014edf 100644 --- a/README.md +++ b/README.md @@ -25,31 +25,37 @@ ```php use Peidikeji\Order\Listeners\UpdateGoodsSoldCount; use Peidikeji\Order\Listeners\UpdateGoodsStock; -use Peidikeji\Order\Listeners\OrderDiscountProfit; -use Peidikeji\Order\Listeners\OrderInviteProfit; -use Peidikeji\Order\Listeners\OrderMakeShipQrcode; -use Peidikeji\Order\Listeners\OrderSendProfit; -use Peidikeji\Order\Listeners\UpdateGoodsSoldCount; -use Peidikeji\Order\Listeners\UpdateGoodsStock; +use Peidikeji\Order\Listeners\OrderUseScore; protected $listen = [ \Peidikeji\Order\Events\OrderCreated::class => [ UpdateGoodsStock::class, - UpdateGoodsSoldCount::class - ], - \Peidikeji\Order\Events\OrderPaid::class => [ - OrderDiscountProfit::class, - OrderSendProfit::class, - OrderMakeShipQrcode::class, + UpdateGoodsSoldCount::class, + OrderUseScore::class, ], \Peidikeji\Order\Events\OrderCanceled::class => [ UpdateGoodsStock::class, UpdateGoodsSoldCount::class, - OrderDiscountProfit::class, - OrderSendProfit::class, - ], - \Peidikeji\Order\Events\OrderReceived::class => [ - OrderInviteProfit::class, + OrderUseScore::class ], ]; -``` \ No newline at end of file +``` + +### dcat-admin-user\src\Models\User.php + +```php + +namespace Peidikeji\User\Models; + +use Illuminate\Foundation\Auth\User as Authenticatable; +use Peidikeji\Order\Models\Order; + +class User extends Authenticatable +{ + // 我的订单 + public function orders() + { + return $this->hasMany(Order:class, 'user_id'); + } +} +``` diff --git a/routes/api.php b/routes/api.php index 81a694e..963869b 100644 --- a/routes/api.php +++ b/routes/api.php @@ -14,7 +14,6 @@ Route::group([ Route::post('order/{id}/cancel', [OrderController::class, 'cancel']); Route::post('order/{id}/receive', [OrderController::class, 'receive']); Route::get('order/{id}/ship', [OrderController::class, 'ships']); - Route::get('order/total', [OrderController::class, 'total']); Route::post('order/sure', [OrderController::class, 'sure']); Route::apiResource('order', OrderController::class); }); diff --git a/src/Action/ShowReceive.php b/src/Action/ShowReceive.php index a92453a..a69edbb 100644 --- a/src/Action/ShowReceive.php +++ b/src/Action/ShowReceive.php @@ -24,7 +24,7 @@ class ShowReceive extends AbstractTool $admin = Admin::user(); $order->options()->create([ - 'user_type' => get_class($admin), + 'user_type' => $admin->getMorphClass(), 'user_id' => $admin->id, 'description' => '管理员: ' . $admin->name . ' 确认收货', 'attribute' => [ diff --git a/src/Enums/ShipStatus.php b/src/Enums/ShipStatus.php index 8683f05..18fc889 100644 --- a/src/Enums/ShipStatus.php +++ b/src/Enums/ShipStatus.php @@ -2,8 +2,6 @@ namespace Peidikeji\Order\Enums; -use Dcat\Admin\Admin; - /** * 订单发货状态 */ @@ -11,8 +9,8 @@ enum ShipStatus: int { case None = 0; case Processing = 1; - case Finished = 3; - case Received = 4; + case Finished = 2; + case Received = 3; public static function options() { diff --git a/src/Filters/OrderFilter.php b/src/Filters/OrderFilter.php index 2bdf797..b2b143d 100644 --- a/src/Filters/OrderFilter.php +++ b/src/Filters/OrderFilter.php @@ -3,44 +3,21 @@ namespace Peidikeji\Order\Filters; use EloquentFilter\ModelFilter; -use Peidikeji\Order\Enums\OrderStatus; -use Peidikeji\Order\Enums\PayStatus; -use Peidikeji\Order\Enums\ShipStatus; -use Peidikeji\Order\Exceptions\OrderException; class OrderFilter extends ModelFilter { - public function status($v) + public function payStatus($v) { - $status = intval($v); - if ($status === OrderStatus::None->value) { - $this->where('pay_status', PayStatus::None)->where('is_closed', 0); - } - else if ($status === OrderStatus::Paying->value) { - $this->where('pay_status', PayStatus::Processing)->where('is_closed', 0); - } - else if ($status === OrderStatus::Paid->value) { - $this->where('pay_status', PayStatus::Success)->where('ship_status', ShipStatus::None)->where('is_closed', 0); - } - else if ($status === OrderStatus::Send->value) { - $this->where('pay_status', PayStatus::Success)->where('ship_status', ShipStatus::Processing)->where('is_closed', 0); - } - else if ($status === OrderStatus::SendFull->value) { - $this->where('pay_status', PayStatus::Success)->where('ship_status', ShipStatus::Finished)->where('is_closed', 0); - } - else if ($status === OrderStatus::Receive->value) { - $this->where('pay_status', PayStatus::Success)->where('ship_status', ShipStatus::Received)->where('is_closed', 0); - } - else if ($status === OrderStatus::Review->value) { - $this->where('pay_status', PayStatus::Success)->where('ship_status', ShipStatus::Received)->whereNotNull('review_at')->where('is_closed', 0); - } - else if ($status === OrderStatus::PayFail->value) { - $this->where('pay_status', PayStatus::Fail)->where('is_closed', 0); - } - else if ($status === OrderStatus::Cancel->value) { - $this->where('is_closed', 1); - } else { - throw new OrderException('未知的订单状态'); - } + $this->where('pay_status', $v); + } + + public function shipStatus($v) + { + $this->where('ship_status', $v); + } + + public function cancel($v) + { + $this->where('is_closed', $v ? 1 : 0); } } diff --git a/src/Form/ShipForm.php b/src/Form/ShipForm.php index af3710a..ffba9fc 100644 --- a/src/Form/ShipForm.php +++ b/src/Form/ShipForm.php @@ -31,6 +31,8 @@ class ShipForm extends Form implements LazyRenderable } DB::beginTransaction(); $order = Order::findOrFail($this->payload['id']); + + $order->update(['ship_way' => $input['ship_way']]); $code = data_get($input, 'company_code'); $company = data_get($input, 'company'); @@ -68,8 +70,9 @@ class ShipForm extends Form implements LazyRenderable 'total_amount' => $item->amount, ]); } - $this->fill(['goods' => $goods]); + $this->fill(['goods' => $goods, 'ship_way' => $this->payload['ship_way']]); + $this->select('ship_way')->options(ShipWay::options())->required(); $this->text('company', '快递公司'); $this->text('company_code', '快递公司编码'); $this->text('sn', '快递单号'); diff --git a/src/Http/Api/OrderController.php b/src/Http/Api/OrderController.php index 94e00b2..d6ed462 100644 --- a/src/Http/Api/OrderController.php +++ b/src/Http/Api/OrderController.php @@ -7,15 +7,14 @@ use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use Illuminate\Validation\Rule; use Illuminate\Validation\Rules\Enum; -use Peidikeji\Coupon\Http\Resources\UserCouponResource; -use Peidikeji\Coupon\Models\UserCoupon; -use Peidikeji\Order\Enums\OrderStatus; use Peidikeji\Order\Enums\PayWay; +use Peidikeji\Order\Enums\ShipStatus; use Peidikeji\Order\Enums\ShipWay; use Peidikeji\Order\Http\Resources\OrderResource; use Peidikeji\Order\Http\Resources\OrderShipResouce; use Peidikeji\Order\OrderService; use Peidikeji\Order\OrderStore; +use Peidikeji\User\Models\User; class OrderController extends Controller { @@ -30,27 +29,6 @@ class OrderController extends Controller return $this->json(OrderResource::collection($list)); } - public function total() - { - $user = auth('api')->user(); - - $query = $user->orders(); - - $maps = [ - 'unpay' => OrderStatus::None, - 'paid' => OrderStatus::Paid, - 'send_full' => OrderStatus::SendFull, - 'receive' => OrderStatus::Receive - ]; - $data = []; - - foreach($maps as $key => $status) { - $data[$key] = $query->clone()->filter(['status' => $status->value])->count(); - } - - return $this->json($data); - } - public function sure(Request $request) { $request->validate([ @@ -112,12 +90,13 @@ class OrderController extends Controller { $user = auth('api')->user(); - $store = OrderStore::init()->user($user)->remarks($request->input('remarks')); $request->validate([ 'goods' => [Rule::requiredIf(!$request->filled('cart_id')), 'array'], 'cart_id' => ['array'], 'address' => [Rule::requiredIf(!$request->filled('address_id')), 'array'], + 'pay_way' => [Rule::in([PayWay::WxMini->value])] ]); + $store = OrderStore::init()->user($user)->remarks($request->input('remarks')); $goods = $request->input('goods'); if ($request->filled('cart_id')) { @@ -148,13 +127,13 @@ class OrderController extends Controller $user->carts()->whereIn('id', $request->input('cart_id'))->delete(); } $result = OrderResource::make($order); + DB::commit(); if ($request->filled('pay_way')) { $result = []; $payData = OrderService::make()->pay($order, $request->input('pay_way')); $result['order'] = OrderResource::make($order); $result['payment'] = $payData; } - DB::commit(); return $this->json($result); } catch (\Exception $e) { return $this->error($e->getMessage()); @@ -172,7 +151,7 @@ class OrderController extends Controller public function pay($id, Request $request) { $request->validate([ - 'pay_way' => ['required', new Enum(PayWay::class)] + 'pay_way' => ['required', Rule::in([PayWay::WxMini->value])] ]); $user = auth('api')->user(); @@ -189,7 +168,7 @@ class OrderController extends Controller } } - public function cancel($id, Request $request) + public function cancel($id) { $user = auth('api')->user(); @@ -221,13 +200,13 @@ class OrderController extends Controller try { DB::beginTransaction(); - OrderService::make()->receive($order); + OrderService::make()->receive($order, true); $order->options()->create([ - 'user_type' => get_class($user), + 'user_type' => $user->getMorphClass(), 'user_id' => $user->id, - 'description' => '用户 确认收货', + 'description' => '用户:'.$user->getSubPhone().' 确认收货', 'attribute' => [ - 'is_closed' => 1 + 'ship_status' => ShipStatus::Finished ] ]); DB::commit(); diff --git a/src/Http/Resources/OrderGoodsResource.php b/src/Http/Resources/OrderGoodsResource.php index 5f46699..fb30ebd 100644 --- a/src/Http/Resources/OrderGoodsResource.php +++ b/src/Http/Resources/OrderGoodsResource.php @@ -11,8 +11,6 @@ class OrderGoodsResource extends JsonResource return [ 'id' => $this->id, 'goods_id' => $this->goods_id, - - 'merchant_id' => $this->merchant_id, 'order_id' => $this->order_id, 'order' => OrderResource::make($this->whenLoaded('order')), @@ -25,8 +23,6 @@ class OrderGoodsResource extends JsonResource 'spec' => $this->spec, 'part' => $this->part, 'price' => floatval($this->price), - 'vip_price' => floatval($this->vip_price), - 'user_price' => floatval($this->user_price), 'amount' => $this->amount, 'money' => floatval($this->money), diff --git a/src/Http/Resources/OrderResource.php b/src/Http/Resources/OrderResource.php index 26cb170..9fbb2af 100644 --- a/src/Http/Resources/OrderResource.php +++ b/src/Http/Resources/OrderResource.php @@ -33,7 +33,7 @@ class OrderResource extends JsonResource 'ship_way' => $this->ship_way, 'ship_address' => $this->ship_address, 'ship_at' => $this->ship_at?->timestamp, - 'ship_money' => $this->ship_money, + 'ship_money' => floatval($this->ship_money), 'user_remarks' => $this->user_remarks, 'created_at' => $this->created_at->timestamp, diff --git a/src/Listeners/OrderUseScore.php b/src/Listeners/OrderUseScore.php new file mode 100644 index 0000000..9fd388f --- /dev/null +++ b/src/Listeners/OrderUseScore.php @@ -0,0 +1,45 @@ + 扣除用户的积分 + * 订单已退款 => 返还用户扣除的积分 + */ +class OrderUseScore implements ShouldQueue +{ + public function handle($event) + { + $order = $event->order; + $user = $order->user; + $amount = floatval($order->score_discount_amount); + if ($amount > 0) { + if ($order->pay_status === PayStatus::Success) { + $user->decrement('profit', $amount); + $user->balanceLogs()->create([ + 'cate' => '订单扣除', + 'amount' => 0 - $amount, + 'balance' => $user->profit, + 'description' => '订单 '.substr($order->sn, -4, 4).' 使用 '.$amount.' 积分抵扣 '.floatval($order->score_discount_money).' 元', + 'source_id' => $order->id, + 'source_type' => $order->getMorphClass(), + ]); + + } elseif ($order->pay_status === PayStatus::Refund) { + $user->increment('profit', $amount); + $user->balanceLogs()->create([ + 'cate' => '订单返还', + 'amount' => $amount, + 'balance' => $user->profit, + 'description' => '订单退款, 返还 '.$amount.' 积分', + 'source_id' => $order->id, + 'source_type' => $order->getMorphClass(), + ]); + } + } + } +} diff --git a/src/OrderService.php b/src/OrderService.php index ba3b5c1..3a678b6 100644 --- a/src/OrderService.php +++ b/src/OrderService.php @@ -286,9 +286,7 @@ class OrderService */ public function cancel(Order $order) { - if (!$order->canCancel()) { - throw new OrderException('订单无法取消'); - } + $order->canCancel(true); // 订单已经支付, 全额退款 if ($order->pay_status === PayStatus::Success) { @@ -319,9 +317,7 @@ class OrderService */ public function delete(Order $order) { - if (!$order->canDelete()) { - throw new OrderException('订单无法删除'); - } + $order->canDelete(true); $order->goods()->delete(); $order->options()->delete(); diff --git a/src/Renderable/ShipLog.php b/src/Renderable/ShipLog.php index f794586..dfb46df 100644 --- a/src/Renderable/ShipLog.php +++ b/src/Renderable/ShipLog.php @@ -8,6 +8,28 @@ class ShipLog extends LazyRenderable { public function render() { - return $this->id; + // dump($this->id, $this->ship); + return << +
+ +
+
+ 2022-09-30 14:00:00 +
+
物流信息
+
+
+
+ +
+
+ 2022-09-30 14:00:00 +
+
物流信息
+
+
+ + HTML; } }