|
|
|
@ -12,18 +12,19 @@ declare (strict_types=1); |
|
|
|
|
|
|
|
|
|
namespace app\api\model; |
|
|
|
|
|
|
|
|
|
use app\api\model\{Goods as GoodsModel, OrderRefund as OrderRefundModel, Setting as SettingModel}; |
|
|
|
|
use app\common\model\TransferRecord; |
|
|
|
|
use app\api\model\{Goods as GoodsModel, OrderRefund as OrderRefundModel, Setting as SettingModel, user\UserCoupon}; |
|
|
|
|
use app\api\service\{User as UserService, order\source\Factory as OrderSourceFactory}; |
|
|
|
|
use app\common\model\Order as OrderModel; |
|
|
|
|
use app\common\service\{Order as OrderService, order\Complete as OrderCompleteService}; |
|
|
|
|
use app\common\enum\{ |
|
|
|
|
use app\common\enum\{OrderType, |
|
|
|
|
Setting as SettingEnum, |
|
|
|
|
order\PayStatus as PayStatusEnum, |
|
|
|
|
order\OrderStatus as OrderStatusEnum, |
|
|
|
|
order\DeliveryType as DeliveryTypeEnum, |
|
|
|
|
order\ReceiptStatus as ReceiptStatusEnum, |
|
|
|
|
order\DeliveryStatus as DeliveryStatusEnum |
|
|
|
|
}; |
|
|
|
|
order\DeliveryStatus as DeliveryStatusEnum, |
|
|
|
|
user\UserTypeEnum}; |
|
|
|
|
use app\api\service\Store as StoreService; |
|
|
|
|
use app\common\library\helper; |
|
|
|
|
use cores\exception\BaseException; |
|
|
|
@ -109,25 +110,19 @@ class Order extends OrderModel |
|
|
|
|
*/ |
|
|
|
|
public function getList(string $dataType = 'all') |
|
|
|
|
{ |
|
|
|
|
|
|
|
|
|
$keyword = $_GET['keyword']; |
|
|
|
|
// 设置订单类型条件 |
|
|
|
|
$dataTypeFilter = $this->getFilterDataType($dataType); |
|
|
|
|
// 当前用户ID |
|
|
|
|
$userId = UserService::getCurrentLoginUserId(); |
|
|
|
|
$query = $this->with(['goods.image']) |
|
|
|
|
->where($dataTypeFilter) |
|
|
|
|
$query = $this->with(['goods.image']); |
|
|
|
|
if (!empty($keyword) && $keyword !== 'undefined') { |
|
|
|
|
$query->where('order_no', 'like', "%{$keyword}%"); |
|
|
|
|
} |
|
|
|
|
$query->where($dataTypeFilter) |
|
|
|
|
->where('user_id', '=', $userId) |
|
|
|
|
->where('is_delete', '=', 0) |
|
|
|
|
->order(['create_time' => 'desc']); |
|
|
|
|
if (!empty($_GET['keyword'])) { |
|
|
|
|
$query = $this->with(['goods.image']) |
|
|
|
|
->join('order_goods b', 'b.order_id = a.order_id') |
|
|
|
|
->where($dataTypeFilter) |
|
|
|
|
->where('a.user_id', '=', $userId) |
|
|
|
|
->where('b.goods_name', '=', $_GET['keyword']) |
|
|
|
|
->where('a.is_delete', '=', 0) |
|
|
|
|
->order(['a.create_time' => 'desc']); |
|
|
|
|
} |
|
|
|
|
$list = $query->paginate(15)->toArray(); |
|
|
|
|
|
|
|
|
|
//这边后面改成多商户的话需要根据storeid去获取信息 |
|
|
|
@ -222,20 +217,22 @@ class Order extends OrderModel |
|
|
|
|
* @return int |
|
|
|
|
* @throws BaseException |
|
|
|
|
*/ |
|
|
|
|
public function getCount(string $dataType = 'all'): int |
|
|
|
|
public function getCount(string $dataType = 'all', $dealer_order_ids = []): int |
|
|
|
|
{ |
|
|
|
|
// 设置订单类型条件 |
|
|
|
|
$dataTypeFilter = $this->getFilterDataType($dataType); |
|
|
|
|
// 当前用户ID |
|
|
|
|
$userId = UserService::getCurrentLoginUserId(); |
|
|
|
|
// 查询数据 |
|
|
|
|
return $this->where('user_id', '=', $userId) |
|
|
|
|
->where('order_status', '<>', 20) |
|
|
|
|
$query = $this->where('user_id', '=', $userId); |
|
|
|
|
if ($dealer_order_ids) { |
|
|
|
|
$query->whereIn('order_id', $dealer_order_ids); |
|
|
|
|
} |
|
|
|
|
return $query->where('order_status', '<>', 20) |
|
|
|
|
->where($dataTypeFilter) |
|
|
|
|
->where('is_delete', '=', 0) |
|
|
|
|
->count(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 设置订单类型条件 |
|
|
|
|
* @param string $dataType |
|
|
|
@ -257,7 +254,7 @@ class Order extends OrderModel |
|
|
|
|
case 'pay': |
|
|
|
|
$filter[] = ['pay_status', '=', PayStatusEnum::PENDING]; |
|
|
|
|
$filter[] = ['order_status', '=', OrderStatusEnum::NORMAL]; |
|
|
|
|
break; |
|
|
|
|
break; |
|
|
|
|
//待发货 |
|
|
|
|
case 'delivery': |
|
|
|
|
$filter = [ |
|
|
|
@ -265,7 +262,7 @@ class Order extends OrderModel |
|
|
|
|
['delivery_status', '<>', DeliveryStatusEnum::DELIVERED], |
|
|
|
|
['order_status', 'in', [OrderStatusEnum::NORMAL, OrderStatusEnum::APPLY_CANCEL]] |
|
|
|
|
]; |
|
|
|
|
break; |
|
|
|
|
break; |
|
|
|
|
//待收货 |
|
|
|
|
case 'receipt': |
|
|
|
|
$filter = [ |
|
|
|
@ -274,8 +271,8 @@ class Order extends OrderModel |
|
|
|
|
['receipt_status', '=', ReceiptStatusEnum::NOT_RECEIVED], |
|
|
|
|
['order_status', '=', OrderStatusEnum::NORMAL] |
|
|
|
|
]; |
|
|
|
|
break; |
|
|
|
|
//待收货 |
|
|
|
|
break; |
|
|
|
|
//待收货 |
|
|
|
|
case 'received': |
|
|
|
|
$filter = [ |
|
|
|
|
['pay_status', '=', PayStatusEnum::SUCCESS], |
|
|
|
@ -302,7 +299,7 @@ class Order extends OrderModel |
|
|
|
|
['order_status', '=', OrderStatusEnum::CANCELLED] |
|
|
|
|
]; |
|
|
|
|
break; |
|
|
|
|
//已评价 |
|
|
|
|
//已评价 |
|
|
|
|
case 'comment': |
|
|
|
|
$filter = [ |
|
|
|
|
['is_comment', '=', 0], |
|
|
|
@ -313,6 +310,83 @@ class Order extends OrderModel |
|
|
|
|
return $filter; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 设置订单类型条件(list查询用) |
|
|
|
|
* @param string $dataType |
|
|
|
|
* @return array |
|
|
|
|
*/ |
|
|
|
|
private function getFilterDataTypeList(string $dataType): array |
|
|
|
|
{ |
|
|
|
|
// 筛选条件 |
|
|
|
|
$filter = []; |
|
|
|
|
// 订单数据类型 |
|
|
|
|
switch ($dataType) { |
|
|
|
|
case 'all': |
|
|
|
|
break; |
|
|
|
|
case 'payment': |
|
|
|
|
$filter[] = ['a.pay_status', '=', PayStatusEnum::PENDING]; |
|
|
|
|
$filter[] = ['a.order_status', '=', OrderStatusEnum::NORMAL]; |
|
|
|
|
break; |
|
|
|
|
//待付款 |
|
|
|
|
case 'pay': |
|
|
|
|
$filter[] = ['a.pay_status', '=', PayStatusEnum::PENDING]; |
|
|
|
|
$filter[] = ['a.order_status', '=', OrderStatusEnum::NORMAL]; |
|
|
|
|
break; |
|
|
|
|
//待发货 |
|
|
|
|
case 'delivery': |
|
|
|
|
$filter = [ |
|
|
|
|
['a.pay_status', '=', PayStatusEnum::SUCCESS], |
|
|
|
|
['a.delivery_status', '<>', DeliveryStatusEnum::DELIVERED], |
|
|
|
|
['a.order_status', 'in', [OrderStatusEnum::NORMAL, OrderStatusEnum::APPLY_CANCEL]] |
|
|
|
|
]; |
|
|
|
|
break; |
|
|
|
|
//待收货 |
|
|
|
|
case 'receipt': |
|
|
|
|
$filter = [ |
|
|
|
|
['a.pay_status', '=', PayStatusEnum::SUCCESS], |
|
|
|
|
['a.delivery_status', '=', DeliveryStatusEnum::DELIVERED], |
|
|
|
|
['a.receipt_status', '=', ReceiptStatusEnum::NOT_RECEIVED], |
|
|
|
|
['a.order_status', '=', OrderStatusEnum::NORMAL] |
|
|
|
|
]; |
|
|
|
|
break; |
|
|
|
|
//待收货 |
|
|
|
|
case 'received': |
|
|
|
|
$filter = [ |
|
|
|
|
['a.pay_status', '=', PayStatusEnum::SUCCESS], |
|
|
|
|
['a.delivery_status', '=', DeliveryStatusEnum::DELIVERED], |
|
|
|
|
['a.receipt_status', '=', ReceiptStatusEnum::NOT_RECEIVED], |
|
|
|
|
['a.order_status', '=', OrderStatusEnum::NORMAL] |
|
|
|
|
]; |
|
|
|
|
break; |
|
|
|
|
//已完成 |
|
|
|
|
case 'complete': |
|
|
|
|
$filter = [ |
|
|
|
|
['a.order_status', '=', OrderStatusEnum::COMPLETED] |
|
|
|
|
]; |
|
|
|
|
break; |
|
|
|
|
//待取消 |
|
|
|
|
case 'apply_cancel': |
|
|
|
|
$filter = [ |
|
|
|
|
['a.order_status', '=', OrderStatusEnum::APPLY_CANCEL] |
|
|
|
|
]; |
|
|
|
|
break; |
|
|
|
|
//已取消 |
|
|
|
|
case 'cancel': |
|
|
|
|
$filter = [ |
|
|
|
|
['a.order_status', '=', OrderStatusEnum::CANCELLED] |
|
|
|
|
]; |
|
|
|
|
break; |
|
|
|
|
//已评价 |
|
|
|
|
case 'comment': |
|
|
|
|
$filter = [ |
|
|
|
|
['a.is_comment', '=', 0], |
|
|
|
|
['a.order_status', '=', OrderStatusEnum::COMPLETED] |
|
|
|
|
]; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
return $filter; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 获取用户订单详情(含关联数据) |
|
|
|
|
* @param int $orderId 订单ID |
|
|
|
@ -420,14 +494,35 @@ class Order extends OrderModel |
|
|
|
|
* @return array |
|
|
|
|
* @throws BaseException |
|
|
|
|
*/ |
|
|
|
|
public function getTodoCounts(): array |
|
|
|
|
public function getTodoCounts($user_type): array |
|
|
|
|
{ |
|
|
|
|
return [ |
|
|
|
|
'payment' => $this->getCount('payment'), // 待付款的订单 |
|
|
|
|
'delivery' => $this->getCount('delivery'), // 待发货的订单 |
|
|
|
|
'received' => $this->getCount('received'), // 待收货的订单 |
|
|
|
|
'refund' => OrderRefundModel::getCountByUnderway(), // 进行中的售后单 |
|
|
|
|
]; |
|
|
|
|
if ($user_type == OrderType::ORDER) {//商城 |
|
|
|
|
return [ |
|
|
|
|
'payment_number' => $this->getCount('payment'), // 待付款的订单 |
|
|
|
|
'delivery_number' => $this->getCount('delivery'), // 待发货的订单 |
|
|
|
|
'received_number' => $this->getCount('received'), // 待收货的订单 |
|
|
|
|
'finish_number' => $this->getCount('complete'), // 已完成 |
|
|
|
|
]; |
|
|
|
|
} elseif($user_type == OrderType::SERVER) {//服务 |
|
|
|
|
$model = new Server\ServerOrder(); |
|
|
|
|
return [ |
|
|
|
|
'confirm_number' => $model->getCount('confirm'), // 待确认的订单 |
|
|
|
|
'service_number' => $model->getCount('service'), // 待发货的订单 |
|
|
|
|
'payment_number' => $model->getCount('payment'), // 待收货的订单 |
|
|
|
|
'check_number' => $model->getCount('complete'), // 已完成的订单 |
|
|
|
|
]; |
|
|
|
|
} elseif($user_type == OrderType::DEALER) {//分销 |
|
|
|
|
$model = new dealer\Order(); |
|
|
|
|
$dealer_order_ids = $model->where('user_id', UserService::getCurrentLoginUserId())->column('order_id'); |
|
|
|
|
return [ |
|
|
|
|
'payment_number' => $this->getCount('payment', $dealer_order_ids), // 待付款的订单 |
|
|
|
|
'delivery_number' => $this->getCount('delivery', $dealer_order_ids), // 待发货的订单 |
|
|
|
|
'received_number' => $this->getCount('received', $dealer_order_ids), // 待收货的订单 |
|
|
|
|
'finish_number' => $this->getCount('complete', $dealer_order_ids), // 已完成的订单 |
|
|
|
|
'refund_number' => OrderRefundModel::getCountByUnderway($dealer_order_ids), // 进行中的售后单 |
|
|
|
|
]; |
|
|
|
|
} |
|
|
|
|
return []; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 返回提示信息 |
|
|
|
@ -476,4 +571,23 @@ class Order extends OrderModel |
|
|
|
|
{ |
|
|
|
|
return static::updateOne(['order_source_id' => $soureId], $orderId); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 获取当前用户行为数量 |
|
|
|
|
* @return array |
|
|
|
|
* @throws BaseException |
|
|
|
|
*/ |
|
|
|
|
public function getActionCounts(): array |
|
|
|
|
{ |
|
|
|
|
return [ |
|
|
|
|
'reservation_number' => RecoveryOrder::getCount(), // 上门预约待服务订单总数 |
|
|
|
|
'view_number' => GoodsBrowseLog::getCount(), // 浏览记录 |
|
|
|
|
'send_number' => TransferRecord::getCount(), // 发货数量 |
|
|
|
|
'integral_number' => User::get(UserService::getCurrentLoginUserId())->points, // 积分数量 |
|
|
|
|
'coupon_number' => UserCoupon::getCount(), // 优惠券 |
|
|
|
|
'goods_collect_number' => 0, // 商品采集数量 |
|
|
|
|
'cart_number' => Cart::getCount(), // 购物车数量 |
|
|
|
|
'take_goods_number' => 0, // 发货记录&提货记录 |
|
|
|
|
]; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|