OrderService.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. <?php
  2. namespace addons\RandFee\common\service;
  3. use addons\RandFee\common\enums\Order as EnumsOrder;
  4. use addons\RandFee\common\models\OrderModel;
  5. use common\enums\OrderStatusEnum;
  6. use common\models\common\PaymentTrade;
  7. use common\models\order\Order;
  8. use common\models\user\User;
  9. use yii\base\Model;
  10. use yii\data\Pagination;
  11. class OrderService extends Model
  12. {
  13. /**
  14. * 商户ID
  15. *
  16. * @var integer
  17. */
  18. public $mall_id;
  19. /**
  20. * 获取订单列表
  21. *
  22. * @param array $params
  23. * @return array
  24. */
  25. public function getOrderList($params)
  26. {
  27. $params = array_filter($params, function ($val) {return ($val === '' || $val === null) ? false : true;});
  28. $limit = $params['limit'] ?? 30;
  29. $page = $params['page'] ?? 1;
  30. $pagination = null;
  31. $model = OrderModel::find()
  32. ->with([/* 'order' => function ($query) {
  33. return $query->select('id, user_id, order_no, order_status');
  34. }, */ 'user' => function ($query) {
  35. return $query->select('id, nickname, mobile, avatar_url');
  36. }, 'trade' => function ($query) {
  37. return $query->select('id, is_pay');
  38. }])
  39. ->where(['mall_id' => $this->mall_id]);
  40. // 会员ID
  41. !empty($params['user_id']) && $model->andWhere(['=', 'user_id', $params['user_id']]);
  42. // 会员名称
  43. if (!empty($params['user_name'])) {
  44. $user_ids = User::find()->where(['mall_id' => $this->mall_id])->andWhere(['like', 'nickname', $params['user_name']])->select('id')->column();
  45. $model->andWhere(['user_id' => $user_ids]);
  46. }
  47. // 会员手机
  48. if (!empty($params['user_mobile'])) {
  49. $user_ids = User::find()->where(['mall_id' => $this->mall_id])->andWhere(['=', 'mobile', $params['user_mobile']])->select('id')->column();
  50. $model->andWhere(['user_id' => $user_ids]);
  51. }
  52. // 订单号
  53. if (!empty($params['order_no'])) {
  54. // $order_ids = Order::find()->where(['mall_id' => $this->mall_id])->andWhere(['like', 'order_no', $params['order_no']])->select('id')->column();
  55. $model->andWhere(['like', 'order_no', $params['order_no']]);
  56. }
  57. // 订单状态
  58. if (isset($params['order_status']) && $params['order_status'] != OrderStatusEnum::ALL) {
  59. $order_ids = Order::find()->where(['mall_id' => $this->mall_id])->andWhere(['=', 'order_status', $params['order_status']])->select('id')->column();
  60. $model->andWhere(['order_id' => $order_ids]);
  61. }
  62. // 订单类型
  63. if (!empty($params['order_type'])) {
  64. $model->andWhere(['order_type' => $params['order_type']]);
  65. }
  66. // 是否支付
  67. if (isset($params['is_pay'])) {
  68. $trade_ids = PaymentTrade::find()->where(['mall_id' => $this->mall_id])->andWhere(['=', 'is_pay', $params['is_pay']])->select('id')->column();
  69. $model->andWhere(['trade_id' => $trade_ids]);
  70. }
  71. // 日期
  72. if (!empty($params['data'])) {
  73. list($b, $e) = $params['data'];
  74. $model->andFilterWhere(['between', 'created_at', strtotime($b), strtotime($e)]);
  75. }
  76. $pagination = new Pagination(['totalCount' => $model->count(), 'pageSize' => $limit]);
  77. $model->limit($pagination->limit)->offset($pagination->offset);
  78. $list = $model->asArray()
  79. ->orderBy('id desc')
  80. ->all();
  81. foreach ($list as $k => $v) {
  82. if (!empty($v['order'])) {
  83. // $list[$k]['order']['order_status_text'] = OrderStatusEnum::getValue($v['order']['order_status']);
  84. }
  85. $list[$k]['order_type_text'] = EnumsOrder::getName($v['order_type']);
  86. if (!empty($v['trade'])) {
  87. $list[$k]['is_pay_text'] = $v['trade']['is_pay'] == 1 ? '已支付' : '未支付';
  88. }
  89. }
  90. $data['list'] = $list;
  91. // $data['order_status'] = OrderStatusEnum::getMap();
  92. $data['order_types'] = EnumsOrder::getTypes();
  93. $data['page_count'] = $pagination->pageCount;
  94. $data['current_page'] = $page + 1;
  95. return $data;
  96. }
  97. }