123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269 |
- <?php
- namespace app\admin\model\shopro\order\traits;
- use app\admin\model\shopro\order\Order;
- use app\admin\model\shopro\order\OrderItem;
- use app\admin\model\shopro\activity\Groupon;
- trait OrderScope
- {
- // 已关闭
- public function scopeClosed($query)
- {
- return $query->where('status', Order::STATUS_CLOSED);
- }
- // 已取消
- public function scopeCancel($query)
- {
- return $query->where('status', Order::STATUS_CANCEL);
- }
- // 未支付
- public function scopeUnpaid($query)
- {
- return $query->where('status', Order::STATUS_UNPAID);
- }
-
- // 可以取消,未支付&货到付款未发货的订单
- public function scopeCanCancel($query)
- {
- return $query->where(function ($query) {
- $query->where('status', Order::STATUS_UNPAID)->whereOr(function ($query) {
- $self_name = (new Order())->getQuery()->getTable();
- $item_name = (new OrderItem())->getQuery()->getTable();
- $query->where('pay_mode', 'offline')->where('status', Order::STATUS_PENDING)->whereExists(function ($query) use ($self_name, $item_name) {
- // 货到付款订单,未发货未退款,可以申请售后
- $query->table($item_name)->where('order_id=' . $self_name . '.id')
- ->where('dispatch_status', OrderItem::DISPATCH_STATUS_NOSEND) // 未发货
- ->where('refund_status', OrderItem::REFUND_STATUS_NOREFUND); // 没有退款完成;
- });
- });
- });
- }
-
- // 已支付
- public function scopePaid($query)
- {
- return $query->whereIn('status', [Order::STATUS_PAID, Order::STATUS_COMPLETED]);
- }
- // 线下支付(货到付款) pending 时
- public function scopeOffline($query)
- {
- return $query->where('pay_mode', 'offline')->where('status', Order::STATUS_PENDING);
- }
- /**
- * 是否线下支付(货到付款),暂未付款
- *
- * @param object|array $order
- * @return boolean
- */
- public function isOffline($order)
- {
- return ($order['status'] == Order::STATUS_PENDING && $order['pay_mode'] == 'offline') ? true : false;
- }
- // 已支付的,或者是线下付款的未支付订单,后续可以,发货,收货,评价
- public function scopePretendPaid($query)
- {
- return $query->where(function ($query) {
- $query->whereIn('status', [Order::STATUS_PAID, Order::STATUS_COMPLETED])->whereOr(function($query) {
- $query->where('pay_mode', 'offline')->where('status', Order::STATUS_PENDING);
- });
- });
- }
- // 已完成
- public function scopeCompleted($query)
- {
- return $query->where('status', Order::STATUS_COMPLETED);
- }
- // 未申请全额退款,或者已拒绝
- public function scopeNoApplyRefund($query)
- {
- return $query->whereIn('apply_refund_status', [
- Order::APPLY_REFUND_STATUS_NOAPPLY,
- Order::APPLY_REFUND_STATUS_REFUSE
- ]);
- }
- // 申请全额退款中
- public function scopeApplyRefundIng($query)
- {
- return $query->where('apply_refund_status', Order::APPLY_REFUND_STATUS_APPLY);
- }
- //拼团待分享
- public function scopegroupon_ing($query){
- $self_name = (new Order())->getQuery()->getTable();
- $groupon_name = (new Groupon())->getQuery()->getTable();
- return $query->where('activity_type','groupon')->where('activity_id','NEQ',0)->whereExists(function ($query) use ($self_name,$groupon_name) {
- $query->table($groupon_name)->where('id=' . $self_name . '.groupon_id')->where('status','ing');
- }
- );
- }
- //notexists 没成团的订单
- /*
- SELECT
- *
- FROM
- `shopro_order`
- WHERE
- (
- `user_id` = 11
- AND ( `status` IN ( 'paid', 'completed' ) OR ( `pay_mode` = 'offline' AND `status` = 'pending' ) )
- AND `apply_refund_status` IN ( 0,- 1 )
- AND EXISTS ( SELECT * FROM `shopro_order_item` WHERE ( order_id = shopro_order.id ) AND `dispatch_status` = 0 AND `refund_status` = 0 )
- AND NOT EXISTS ( SELECT * FROM `shopro_order_item` WHERE ( order_id = shopro_order.id ) AND `aftersale_status` = 1 AND `dispatch_status` = 0 AND `refund_status` = 0 )
- AND NOT EXISTS (
- SELECT
- *
- FROM
- `shopro_order` `so`
- WHERE
- ( so.id = shopro_order.id )
- AND `so`.`activity_type` = 'groupon'
- AND `so`.`activity_id` <> 0
- AND EXISTS ( SELECT * FROM `shopro_activity_groupon` WHERE ( id = so.groupon_id ) AND `status` NOT IN ( 'finish', 'finish_fictitious' ) )
- )
- )
- AND `shopro_order`.`deletetime` IS NULL
- ORDER BY
- `id` DESC
- LIMIT 0,
- 10
- */
- public function scopegroupon_finish($query){
- $self_name = (new Order())->getQuery()->getTable();
- $groupon_name = (new Groupon())->getQuery()->getTable();
- return $query->whereNotExists(function ($query) use ($self_name,$groupon_name) {
- $query->table($self_name)->alias('so')->where('so.id=' . $self_name . '.id')->where('so.activity_type','groupon')->where('so.activity_id','NEQ',0)
- ->whereExists(function ($query) use ($groupon_name) {
- $query->table($groupon_name)->where('id=so.groupon_id')->where('status','NOTIN',['finish','finish_fictitious']);
- });
- });
- }
- // 未发货
- public function scopeNosend($query)
- {
- $self_name = (new Order())->getQuery()->getTable();
- $item_name = (new OrderItem())->getQuery()->getTable();
- $is_express = (request()->action() == 'exportdelivery') ? 1 : 0; // 是否是 express,将只查快递物流的代发货
- return $query->noApplyRefund()->whereExists(function ($query) use ($self_name, $item_name, $is_express) {
- $query->table($item_name)->where('order_id=' . $self_name . '.id')
- ->where('dispatch_status', OrderItem::DISPATCH_STATUS_NOSEND) // 未发货
- ->where('refund_status', OrderItem::REFUND_STATUS_NOREFUND); // 没有退款完成
- if ($is_express) { // 只查快递物流的代发货
- $query->where('dispatch_type', 'express');
- }
- })->whereNotExists(function ($query) use ($self_name, $item_name, $is_express) {
- // 不是 正在售后的商品
- $query->table($item_name)->where('order_id=' . $self_name . '.id')
- ->where('aftersale_status', OrderItem::AFTERSALE_STATUS_ING) // 但是售后中
- ->where('dispatch_status', OrderItem::DISPATCH_STATUS_NOSEND) // 未发货
- ->where('refund_status', OrderItem::REFUND_STATUS_NOREFUND); // 没有退款完成;
-
- if ($is_express) { // 只查快递物流的代发货
- $query->where('dispatch_type', 'express');
- }
- });
- }
- // 待收货
- public function scopeNoget($query)
- {
- return $query->whereExists(function ($query) {
- $self_name = (new Order())->getQuery()->getTable();
- $item_name = (new OrderItem())->getQuery()->getTable();
- $query->table($item_name)->where('order_id=' . $self_name . '.id')
- ->where('dispatch_status', OrderItem::DISPATCH_STATUS_SENDED) // 已发货
- ->where('refund_status', OrderItem::REFUND_STATUS_NOREFUND); // 没有退款完成
- });
- }
- // 已拒收
- public function scopeRefuse($query)
- {
- return $query->whereExists(function ($query) {
- $self_name = (new Order())->getQuery()->getTable();
- $item_name = (new OrderItem())->getQuery()->getTable();
- $query->table($item_name)->where('order_id=' . $self_name . '.id')
- ->where('dispatch_status', OrderItem::DISPATCH_STATUS_REFUSE) // 已拒收
- ->where('refund_status', OrderItem::REFUND_STATUS_NOREFUND); // 没有退款完成
- });
- }
- // 待评价
- public function scopeNocomment($query)
- {
- return $query->whereExists(function ($query) {
- $self_name = (new Order())->getQuery()->getTable();
- $item_name = (new OrderItem())->getQuery()->getTable();
- $query->table($item_name)->where('order_id=' . $self_name . '.id')
- ->where('dispatch_status', OrderItem::DISPATCH_STATUS_GETED) // 已收货
- ->where('refund_status', OrderItem::REFUND_STATUS_NOREFUND) // 没有退款完成
- ->where('comment_status', OrderItem::COMMENT_STATUS_NO); // 未评价
- });
- }
- // 售后 (后台要用,虽然有专门的售后单列表)
- public function scopeAftersale($query)
- {
- return $query->whereExists(function ($query) {
- $self_name = (new Order())->getQuery()->getTable();
- $item_name = (new OrderItem())->getQuery()->getTable();
- $query->table($item_name)->where('order_id=' . $self_name . '.id')
- ->where('aftersale_status', '<>', OrderItem::AFTERSALE_STATUS_NOAFTER);
- });
- }
- // 退款
- public function scopeRefund($query)
- {
- return $query->whereExists(function ($query) {
- $self_name = (new Order())->getQuery()->getTable();
- $item_name = (new OrderItem())->getQuery()->getTable();
- $query->table($item_name)->where('order_id=' . $self_name . '.id')
- ->where('refund_status', '<>', OrderItem::REFUND_STATUS_NOREFUND);
- });
- }
- public function scopeCanAftersale($query)
- {
- return $query->where('status', 'in', [Order::STATUS_PAID, Order::STATUS_COMPLETED]);
- }
- public function scopeCanDelete($query)
- {
- return $query->where('status', 'in', [
- Order::STATUS_CANCEL,
- Order::STATUS_CLOSED,
- Order::STATUS_COMPLETED
- ]);
- }
- }
|