OrderRefund.php 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * Name: 芸众商城系统
  5. * Author: 广州市芸众信息科技有限公司
  6. * Profile: 广州市芸众信息科技有限公司位于国际商贸中心的广州,专注于移动电子商务生态系统打造,拥有芸众社交电商系统、区块链数字资产管理系统、供应链管理系统、电子合同等产品/服务。官网 :www.yunzmall.com www.yunzshop.com
  7. * Date: 2022/10/20
  8. * Time: 16:18
  9. */
  10. namespace app\backend\modules\refund\models;
  11. use app\backend\modules\order\models\VueOrder;
  12. use app\common\models\OrderGoods;
  13. use app\common\models\refund\RefundGoodsLog;
  14. use app\framework\Database\Eloquent\Builder;
  15. /**
  16. * Class OrderRefund
  17. * @method static self backendSearch($search)
  18. * @package app\backend\modules\refund\models
  19. */
  20. class OrderRefund extends \app\common\models\refund\RefundApply
  21. {
  22. protected $appends = [
  23. 'plugin_id','refund_type_name', 'status_name',
  24. 'receive_status_name', 'refund_way_type_name', 'order_type_name',
  25. ];
  26. public function getOrderTypeNameAttribute()
  27. {
  28. return $this->order->getOrderType()->getName();
  29. }
  30. public function getBackendButtonModels()
  31. {
  32. return (new \app\backend\modules\refund\services\BackendRefundButtonService($this))->getButtonModels();
  33. }
  34. public function getBackendRefundSteps()
  35. {
  36. return (new \app\backend\modules\refund\services\steps\RefundStatusStepManager($this))->getStepItems();
  37. }
  38. public static function detail($id)
  39. {
  40. return self::with([
  41. 'hasOneMember' => function ($member) {
  42. $member->select(['uid', 'avatar', 'nickname', 'realname', 'mobile', 'createtime',
  43. 'credit1', 'credit2',]);
  44. },
  45. 'order',
  46. 'refundOrderGoods',
  47. 'processLog',
  48. 'returnExpress',
  49. 'hasManyResendExpress',
  50. 'changeLog',
  51. ])->find($id);
  52. }
  53. public function scopeBackendSearch(Builder $query, $search = [])
  54. {
  55. $model = $query->select('yz_order_refund.*');
  56. if ($search['order_sn']) {
  57. $model->leftJoin('yz_order', 'yz_order_refund.order_id', 'yz_order.id')
  58. ->where('yz_order.order_sn', trim($search['order_sn']));
  59. //$order_id = Order::where('order_sn', $search['order_sn'])->value('id');
  60. //$model->where('yz_order_refund.order_id', $order_id);
  61. }
  62. if ($search['refund_sn']) {
  63. $model->where('yz_order_refund.refund_sn', trim($search['refund_sn']));
  64. }
  65. if (isset($search['refund_type']) && is_numeric($search['refund_type'])) {
  66. $model->where('refund_type', $search['refund_type']);
  67. }
  68. if (isset($search['status']) && is_numeric($search['status'])) {
  69. if ($search['status'] == 99) {
  70. $model->whereIn('status', [self::COMPLETE,self::CONSENSUS,self::CLOSE]);
  71. } else {
  72. $model->where('status', $search['status']);
  73. }
  74. }
  75. if ($search['member_id']) {
  76. $model->where('yz_order_refund.uid', $search['member_id']);
  77. }
  78. if (!empty($search['member_info']) && isset($search['member_type'])) {
  79. $model->whereHas('hasOneMember', function ($member) use ($search) {
  80. $member->select('uid', 'nickname', 'realname', 'mobile', 'avatar')
  81. ->where(function ($query) use ($search) {
  82. switch ($search['member_type']) {
  83. case 1 :
  84. $query->where('nickname', 'like', '%' . $search['member_info'] . '%');
  85. break;
  86. case 2 :
  87. $query->where('realname', 'like', '%' . $search['member_info'] . '%');
  88. break;
  89. case 3 :
  90. $query->where('mobile', 'like', '%' . $search['member_info'] . '%');
  91. break;
  92. default :
  93. }
  94. });
  95. });
  96. }
  97. //商品id 商品名称
  98. if ($search['goods_id'] || $search['goods_title']) {
  99. $orderGoodsModel = OrderGoods::uniacid();
  100. if ($search['goods_id']) {
  101. $orderGoodsModel->where('goods_id', $search['goods_id']);
  102. }
  103. if ($search['goods_title']) {
  104. $orderGoodsModel->where('title', 'like', "%".trim($search['goods_title'])."%");
  105. }
  106. $order_ids = $orderGoodsModel->pluck('order_id')->unique()->toArray();
  107. $model->whereIn('yz_order_refund.order_id', $order_ids);
  108. }
  109. //操作时间范围
  110. if ($search['start_time'] && $search['end_time'] && $search['time_field']) {
  111. $range = [strtotime($search['start_time']), strtotime($search['end_time'])];
  112. $model->whereBetween('yz_order_refund.'.$search['time_field'], $range);
  113. }
  114. $model->with([
  115. 'hasOneMember' => function ($member) {
  116. $member->select(['uid', 'avatar', 'nickname', 'realname', 'mobile', 'createtime',
  117. 'credit1', 'credit2',]);
  118. },
  119. 'order' => function ($order) {
  120. $order->with(['address']);
  121. },
  122. 'refundOrderGoods',
  123. ]);
  124. return $model;
  125. }
  126. public function order()
  127. {
  128. return $this->belongsTo(VueOrder::class, 'order_id', 'id');
  129. }
  130. }