RechargeOrder.php 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | Niucloud-admin 企业快速开发的saas管理平台
  4. // +----------------------------------------------------------------------
  5. // | 官方网址:https://www.niucloud.com
  6. // +----------------------------------------------------------------------
  7. // | niucloud团队 版权所有 开源版本可自由商用
  8. // +----------------------------------------------------------------------
  9. // | Author: Niucloud Team
  10. // +----------------------------------------------------------------------
  11. namespace app\model\order;
  12. use app\dict\common\ChannelDict;
  13. use app\model\member\Member;
  14. use app\model\pay\Pay;
  15. use core\base\BaseModel;
  16. use think\model\relation\HasMany;
  17. use think\model\relation\HasOne;
  18. /**
  19. * 充值订单模型
  20. * Class RechargeOrder
  21. * @package app\model\order
  22. */
  23. class RechargeOrder extends BaseModel
  24. {
  25. /**
  26. * 数据表主键
  27. * @var string
  28. */
  29. protected $pk = 'order_id';
  30. /**
  31. * 模型名称
  32. * @var string
  33. */
  34. protected $name = 'recharge_order';
  35. //类型
  36. protected $type = [
  37. 'pay_time' => 'timestamp',
  38. 'close_time' => 'timestamp',
  39. ];
  40. /**
  41. * 登录渠道字段转化
  42. * @param $value
  43. * @param $data
  44. * @return mixed
  45. */
  46. public function getOrderFromNameAttr($value, $data)
  47. {
  48. if (isset($data['order_from'])) {
  49. return ChannelDict::getType()[$data['order_from']] ?? '';
  50. }
  51. }
  52. /**
  53. * 会员id搜索
  54. * @param $query
  55. * @param $value
  56. * @param $data
  57. */
  58. public function searchMemberIdAttr($query, $value, $data)
  59. {
  60. if ($value) {
  61. $query->where('member_id', '=', $value);
  62. }
  63. }
  64. /**
  65. * 订单来源
  66. * @param $query
  67. * @param $value
  68. * @param $data
  69. */
  70. public function searchOrderFromAttr($query, $value, $data)
  71. {
  72. if ($value) {
  73. $query->where('order_from', '=', $value);
  74. }
  75. }
  76. /**
  77. * 订单类型
  78. * @param $query
  79. * @param $value
  80. * @param $data
  81. */
  82. public function searchOrderTypeAttr($query, $value, $data)
  83. {
  84. if ($value) {
  85. $query->where('order_type', '=', $value);
  86. }
  87. }
  88. /**
  89. * 支付流水号
  90. * @param $query
  91. * @param $value
  92. * @param $data
  93. */
  94. public function searchOutTradeNoAttr($query, $value, $data)
  95. {
  96. if ($value) {
  97. $query->where('out_trade_no', '=', $value);
  98. }
  99. }
  100. /**
  101. * 订单号
  102. * @param $query
  103. * @param $value
  104. * @param $data
  105. */
  106. public function searchOrderNoAttr($query, $value, $data)
  107. {
  108. if ($value) {
  109. $query->where('order_no', '=', $value);
  110. }
  111. }
  112. /**
  113. * 订单金额
  114. * @param $query
  115. * @param $value
  116. * @param $data
  117. * @return void
  118. */
  119. public function searchOrderMoneyAttr($query, $value, $data)
  120. {
  121. if (!empty($data['start_money']) && !empty($data['end_money'])) {
  122. $money = [$data['start_money'], $data['end_money']];
  123. sort($money);
  124. $query->where('order_money', 'between', $money);
  125. } else if (!empty($data['start_money'])) {
  126. $query->where('order_money', '>=', $data['start_money']);
  127. } else if (!empty($data['end_money'])) {
  128. $query->where('order_money', '<=', $data['end_money']);
  129. }
  130. }
  131. /**
  132. * 订单状态
  133. * @param $query
  134. * @param $value
  135. * @param $data
  136. */
  137. public function searchOrderStatusAttr($query, $value, $data)
  138. {
  139. if ($value != '') {
  140. $query->where('order_status', '=', $value);
  141. }
  142. }
  143. /**
  144. * 创建时间搜索器
  145. * @param $query
  146. * @param $value
  147. * @param $data
  148. */
  149. public function searchCreateTimeAttr($query, $value, $data)
  150. {
  151. $start_time = empty($value[0]) ? 0 : strtotime($value[0]);
  152. $end_time = empty($value[1]) ? 0 : strtotime($value[1]);
  153. if ($start_time > 0 && $end_time > 0) {
  154. $query->whereBetweenTime('create_time', $start_time, $end_time);
  155. } else if ($start_time > 0 && $end_time == 0) {
  156. $query->where([['create_time', '>=', $start_time]]);
  157. } else if ($start_time == 0 && $end_time > 0) {
  158. $query->where([['create_time', '<=', $end_time]]);
  159. }
  160. }
  161. /**
  162. * 支付时间筛选
  163. * @param $query
  164. * @param $value
  165. * @param $data
  166. * @return void
  167. */
  168. public function searchPayTimeAttr($query, $value, $data)
  169. {
  170. $start_time = empty($value[0]) ? 0 : strtotime($value[0]);
  171. $end_time = empty($value[1]) ? 0 : strtotime($value[1]);
  172. if ($start_time > 0 && $end_time > 0) {
  173. $query->whereBetweenTime('pay_time', $start_time, $end_time);
  174. } else if ($start_time > 0 && $end_time == 0) {
  175. $query->where([['pay_time', '>=', $start_time]]);
  176. } else if ($start_time == 0 && $end_time > 0) {
  177. $query->where([['pay_time', '<=', $end_time]]);
  178. }
  179. }
  180. /**
  181. * 订单项目
  182. * @return HasMany
  183. */
  184. public function item()
  185. {
  186. return $this->hasMany(RechargeOrderItem::class, 'order_id', 'order_id');
  187. }
  188. /**
  189. * 订单会员
  190. * @return HasOne
  191. */
  192. public function member()
  193. {
  194. return $this->hasOne(Member::class, 'member_id', 'member_id');
  195. }
  196. /**
  197. * 支付记录
  198. * @return HasOne
  199. */
  200. public function pay()
  201. {
  202. return $this->hasOne(Pay::class, 'out_trade_no', 'out_trade_no')->bind(['pay_type_name' => 'type_name']);
  203. }
  204. }