StoreOrderRefundDao.php 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. <?php
  2. namespace app\dao\order;
  3. use app\dao\BaseDao;
  4. use app\model\order\StoreOrderRefund;
  5. class StoreOrderRefundDao extends BaseDao
  6. {
  7. /**
  8. * 设置模型
  9. * @return string
  10. */
  11. protected function setModel(): string
  12. {
  13. return StoreOrderRefund::class;
  14. }
  15. /**
  16. * 搜索器
  17. * @param array $where
  18. * @return \crmeb\basic\BaseModel|mixed|\think\Model
  19. */
  20. public function search(array $where = [])
  21. {
  22. $realName = $where['real_name'] ?? '';
  23. $fieldKey = $where['field_key'] ?? '';
  24. $fieldKey = $fieldKey == 'all' ? '' : $fieldKey;
  25. return parent::search($where, false)->when(isset($where['refund_type']) && $where['refund_type'] !== '', function ($query) use ($where) {
  26. if ($where['refund_type'] == 0) {
  27. $query->where('refund_type', '>', 0);
  28. } else {
  29. if (is_array($where['refund_type'])) {
  30. $query->whereIn('refund_type', $where['refund_type']);
  31. } else {
  32. $query->where('refund_type', $where['refund_type']);
  33. }
  34. }
  35. })->when(isset($where['order_id']) && $where['order_id'] != '', function ($query) use ($where) {
  36. $query->where(function ($q) use ($where) {
  37. $q->whereLike('order_id', '%' . $where['order_id'] . '%')->whereOr('store_order_id', 'IN', function ($orderModel) use ($where) {
  38. $orderModel->name('store_order')->field('id')->whereLike('order_id', '%' . $where['order_id'] . '%');
  39. });
  40. });
  41. })->when($realName && !$fieldKey, function ($query) use ($where) {
  42. $query->where(function ($que) use ($where) {
  43. $que->whereLike('order_id', '%' . $where['real_name'] . '%')->whereOr(function ($q) use ($where) {
  44. $q->whereOr('uid', 'in', function ($q) use ($where) {
  45. $q->name('user')->whereLike('nickname|uid|phone', '%' . $where['real_name'] . '%')->field(['uid'])->select();
  46. })->whereOr('store_order_id', 'in', function ($que) use ($where) {
  47. $que->name('store_order_cart_info')->whereIn('product_id', function ($q) use ($where) {
  48. $q->name('store_product')->whereLike('store_name|keyword', '%' . $where['real_name'] . '%')->field(['id'])->select();
  49. })->field(['oid'])->select();
  50. })->whereOr('store_order_id', 'in', function ($orderModel) use ($where) {
  51. $orderModel->name('store_order')->field('id')->whereLike('order_id', '%' . $where['real_name'] . '%');
  52. });
  53. });
  54. });
  55. })->when(isset($where['refundTypes']) && $where['refundTypes'] != '', function ($query) use ($where) {
  56. switch ((int)$where['refundTypes']) {
  57. case 1:
  58. $query->where('refund_type', 'in', '1,2');
  59. break;
  60. case 2:
  61. $query->where('refund_type', 4);
  62. break;
  63. case 3:
  64. $query->where('refund_type', 5);
  65. break;
  66. case 4:
  67. $query->where('refund_type', 6);
  68. break;
  69. }
  70. });
  71. }
  72. /**
  73. * 退款订单列表
  74. * @param $where
  75. * @param int $page
  76. * @param int $limit
  77. * @param string $field
  78. * @param array $with
  79. * @return array
  80. * @throws \think\db\exception\DataNotFoundException
  81. * @throws \think\db\exception\DbException
  82. * @throws \think\db\exception\ModelNotFoundException
  83. */
  84. public function getList($where, $page = 0, $limit = 0, $field = '*', $with = [])
  85. {
  86. return $this->search($where)->field($field)->with(array_merge(['user'], $with))->when($page && $limit, function ($query) use ($page, $limit) {
  87. $query->page($page, $limit);
  88. })->order('id DESC')->select()->toArray();
  89. }
  90. /**
  91. * 根据时间获取
  92. * @param array $where
  93. * @return float|int
  94. */
  95. public function getOrderRefundMoneyByWhere(array $where, string $sum_field, string $selectType, string $group = "")
  96. {
  97. switch ($selectType) {
  98. case "sum" :
  99. return $this->getDayTotalMoney($where, $sum_field);
  100. case "group" :
  101. return $this->getDayGroupMoney($where, $sum_field, $group);
  102. }
  103. }
  104. /**
  105. * 按照支付时间统计支付金额
  106. * @param array $where
  107. * @param string $sumField
  108. * @return mixed
  109. */
  110. public function getDayTotalMoney(array $where, string $sumField)
  111. {
  112. return $this->search($where)
  113. ->when(isset($where['timeKey']), function ($query) use ($where) {
  114. $query->whereBetweenTime('add_time', $where['timeKey']['start_time'], $where['timeKey']['end_time']);
  115. })
  116. ->sum($sumField);
  117. }
  118. /**
  119. * 时间分组订单付款金额统计
  120. * @param array $where
  121. * @param string $sumField
  122. * @return mixed
  123. */
  124. public function getDayGroupMoney(array $where, string $sumField, string $group)
  125. {
  126. return $this->search($where)
  127. ->when(isset($where['timeKey']), function ($query) use ($where, $sumField, $group) {
  128. $query->whereBetweenTime('add_time', $where['timeKey']['start_time'], $where['timeKey']['end_time']);
  129. if ($where['timeKey']['days'] == 1) {
  130. $timeUinx = "%H";
  131. } elseif ($where['timeKey']['days'] == 30) {
  132. $timeUinx = "%Y-%m-%d";
  133. } elseif ($where['timeKey']['days'] == 365) {
  134. $timeUinx = "%Y-%m";
  135. } elseif ($where['timeKey']['days'] > 1 && $where['timeKey']['days'] < 30) {
  136. $timeUinx = "%Y-%m-%d";
  137. } elseif ($where['timeKey']['days'] > 30 && $where['timeKey']['days'] < 365) {
  138. $timeUinx = "%Y-%m";
  139. }
  140. $query->field("sum($sumField) as number,FROM_UNIXTIME($group, '$timeUinx') as time");
  141. $query->group("FROM_UNIXTIME($group, '$timeUinx')");
  142. })
  143. ->order('add_time ASC')->select()->toArray();
  144. }
  145. /**
  146. * @param $time
  147. * @param $timeType
  148. * @param $field
  149. * @param $str
  150. * @return mixed
  151. * @author 吴汐
  152. * @email 442384644@qq.com
  153. * @date 2023/03/06
  154. */
  155. public function getProductTrend($time, $timeType, $field, $str)
  156. {
  157. return $this->getModel()->where(function ($query) use ($time, $field) {
  158. if ($time[0] == $time[1]) {
  159. $query->whereDay($field, $time[0]);
  160. } else {
  161. $query->whereTime($field, 'between', $time);
  162. }
  163. })->field("FROM_UNIXTIME($field,'$timeType') as days,$str as num")->group('days')->select()->toArray();
  164. }
  165. }