Order.php 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474
  1. <?php
  2. namespace App\Modules\Trade\Models;
  3. use DB;
  4. use Illuminate\Database\Eloquent\Model;
  5. class Order extends Model
  6. {
  7. protected $table = 'orders';
  8. protected $fillable = ['distribution_channel_id', 'uid', 'created_at', 'product_id', 'price', 'status', 'pay_type', 'trade_no', 'pay_merchant_id', 'servicer', 'transaction_id', 'pay_end_at', 'create_ip', 'send_order_id', 'send_order_name', 'activity_id'];
  9. //查询
  10. static function search($params = [], $is_all = false)
  11. {
  12. // \Log::info('search:'.json_encode($params));
  13. $search_obj = self::orderBy('id', 'desc')->select(['orders.*', 'activity.name'])->leftjoin('activity', 'activity.id', '=', 'orders.activity_id');
  14. if (isset($params['distribution_channel_id']) && $params['distribution_channel_id']) $search_obj->where('orders.distribution_channel_id', $params['distribution_channel_id']);
  15. if (isset($params['begin_time']) && $params['begin_time']) $search_obj->where('orders.created_at', '>=', $params['begin_time']);
  16. if (isset($params['end_time']) && $params['end_time']) $search_obj->where('orders.created_at', '<=', $params['end_time'] . ' 23:59:59');
  17. if (isset($params['uid']) && $params['uid']) $search_obj->where('uid', $params['uid']);
  18. if (isset($params['inner_send_order_id']) && $params['inner_send_order_id']) $search_obj->where('inner_send_order_id', $params['inner_send_order_id']);
  19. if (isset($params['send_order_id']) && $params['send_order_id']) $search_obj->where('send_order_id', $params['send_order_id']);
  20. if (isset($params['activity_id']) && $params['activity_id']) $search_obj->where('activity_id', $params['activity_id']);
  21. if (isset($params['trade_no']) && $params['trade_no']) $search_obj->where('trade_no', $params['trade_no']);
  22. if (isset($params['transaction_id']) && $params['transaction_id']) $search_obj->where('transaction_id', $params['transaction_id']);
  23. if (isset($params['status']) && $params['status']) $search_obj->where('status', $params['status']);
  24. if (isset($params['activity_id']) && count($params['activity_id']) > 0) $search_obj->whereIn('activity_id', $params['activity_id']);
  25. if (isset($params['from_type']) && $params['from_type']) $search_obj->where('from_type', $params['from_type']);
  26. /*\Log::info('filter_:'.json_encode($params));
  27. \Log::info(json_encode($search_obj));
  28. \Log::info('my_sql:'.($search_obj->toSql()));*/
  29. // \Log::info('my_sql:'.($search_obj->toSql()));
  30. if (isset($params['created_at']) && $params['created_at']) {
  31. \Log::info('created_at--:' . date('Y-m-d 00:00:00', strtotime($params['created_at'])));
  32. $search_obj->whereBetween('orders.created_at', [date('Y-m-d 00:00:00', strtotime($params['created_at'])), date('Y-m-d 23:59:59', strtotime($params['created_at']))]);
  33. }
  34. if ($is_all) {
  35. return $search_obj->get();
  36. } else {
  37. return $search_obj->paginate();
  38. }
  39. }
  40. //查询对象
  41. static function searchObj($params = [])
  42. {
  43. $search_obj = self::orderBy('id', 'desc')->select(['orders.*', 'activity.name'])->leftjoin('activity', 'activity.id', '=', 'orders.activity_id');
  44. if (isset($params['distribution_channel_id']) && $params['distribution_channel_id']) $search_obj->where('distribution_channel_id', $params['distribution_channel_id']);
  45. if (isset($params['begin_time']) && $params['begin_time']) $search_obj->where('orders.created_at', '>=', $params['begin_time']);
  46. if (isset($params['end_time']) && $params['end_time']) $search_obj->where('orders.created_at', '<=', $params['end_time'] . ' 23:59:59');
  47. if (isset($params['uid']) && $params['uid']) $search_obj->where('uid', $params['uid']);
  48. if (isset($params['send_order_id']) && $params['send_order_id']) $search_obj->where('send_order_id', $params['send_order_id']);
  49. if (isset($params['activity_id']) && $params['activity_id']) $search_obj->where('activity_id', $params['activity_id']);
  50. if (isset($params['trade_no']) && $params['trade_no']) $search_obj->where('trade_no', $params['trade_no']);
  51. if (isset($params['transaction_id']) && $params['transaction_id']) $search_obj->where('transaction_id', $params['transaction_id']);
  52. if (isset($params['status']) && $params['status']) $search_obj->where('status', $params['status']);
  53. if (isset($params['activity_id']) && count($params['activity_id']) > 0) $search_obj->whereIn('activity_id', $params['activity_id']);
  54. return $search_obj;
  55. }
  56. //总额统计
  57. static function getAmount($params = [])
  58. {
  59. $search_obj = self::where('status', 'PAID');
  60. if (isset($params['distribution_channel_id']) && $params['distribution_channel_id']) $search_obj->where('distribution_channel_id', $params['distribution_channel_id']);
  61. if (isset($params['begin_time']) && $params['begin_time']) $search_obj->where('created_at', '>=', $params['begin_time']);
  62. if (isset($params['end_time']) && $params['end_time']) $search_obj->where('created_at', '<=', $params['end_time']);
  63. if (isset($params['uid']) && $params['uid']) $search_obj->where('uid', $params['uid']);
  64. if (isset($params['send_order_id']) && $params['send_order_id']) $search_obj->where('send_order_id', $params['send_order_id']);
  65. if (isset($params['activity_id']) && $params['activity_id']) $search_obj->where('activity_id', $params['activity_id']);
  66. if (isset($params['distribution_channel_id_array']) && $params['distribution_channel_id_array']) $search_obj->whereIn('distribution_channel_id', $params['distribution_channel_id_array']);
  67. if (isset($params['not_in_pay_merchant_id']) && count($params['not_in_pay_merchant_id']) > 0) {
  68. $search_obj->whereNotIn('pay_merchant_id', $params['not_in_pay_merchant_id']);
  69. } else {
  70. }
  71. return (float)$search_obj->sum('price');
  72. }
  73. //获取渠道当日数据
  74. static function getChannelToday($distribution_channel_id)
  75. {
  76. $begin_time = date('Y-m-d');
  77. $end_time = date("Y-m-d", strtotime($begin_time) + 86400);
  78. return self::select([DB::Raw("sum(price) as success_amount,count(1) as paid_number")])
  79. ->where('distribution_channel_id', $distribution_channel_id)
  80. ->where('created_at', '>=', $begin_time)
  81. ->where('created_at', '<', $end_time)
  82. ->where('status', 'PAID')
  83. ->first();
  84. }
  85. //获取渠道当日实时统计数据
  86. static function getChannelTodayData($distribution_channel_id)
  87. {
  88. $begin_time = date('Y-m-d');
  89. $end_time = date('Y-m-d', strtotime($begin_time) + 86400);
  90. $paid_info = self::select([DB::Raw("order_type,sum(price) as success_amount,count(1) as paid_num")])
  91. ->where('distribution_channel_id', $distribution_channel_id)
  92. ->where('created_at', '>=', $begin_time)
  93. ->where('created_at', '<', $end_time)
  94. ->where('status', 'PAID')
  95. ->groupBy('order_type')
  96. ->get()
  97. ->toArray();
  98. $unpaid_info = self::select([DB::Raw("order_type,sum(price),count(1) as unpaid_num")])
  99. ->where('distribution_channel_id', $distribution_channel_id)
  100. ->where('created_at', '>=', $begin_time)
  101. ->where('created_at', '<', $end_time)
  102. ->where('status', 'UNPAID')
  103. ->groupBy('order_type')
  104. ->get()
  105. ->toArray();
  106. $ret = [
  107. 'amount' => 0,
  108. 'paid_num' => 0,
  109. 'total_order_num' => 0,
  110. 'recharge_unpaid_number' => 0,
  111. 'recharge_paid_number' => 0,
  112. 'recharge_success_amount' => 0,
  113. 'year_unpaid_number' => 0,
  114. 'year_paid_number' => 0,
  115. 'year_success_amount' => 0
  116. ];
  117. foreach ($paid_info as $item) {
  118. $ret['amount'] += $item['success_amount'];
  119. $ret['paid_num'] += $item['paid_num'];
  120. $ret['total_order_num'] += $item['paid_num'];
  121. if ($item['order_type'] == 'RECHARGE') {
  122. $ret['recharge_paid_number'] += $item['paid_num'];
  123. $ret['recharge_success_amount'] += $item['success_amount'];
  124. }
  125. if ($item['order_type'] == 'YEAR') {
  126. $ret['year_paid_number'] += $item['paid_num'];
  127. $ret['year_success_amount'] += $item['success_amount'];
  128. }
  129. }
  130. foreach ($unpaid_info as $uitem) {
  131. $ret['total_order_num'] += $uitem['unpaid_num'];
  132. if ($uitem['order_type'] == 'RECHARGE') $ret['recharge_unpaid_number'] += $uitem['unpaid_num'];
  133. if ($uitem['order_type'] == 'YEAR') $ret['year_unpaid_number'] += $uitem['unpaid_num'];
  134. }
  135. return $ret;
  136. }
  137. //获取渠道日数据
  138. static function getChannelDateOrderInfo($distribution_channel_id, $date)
  139. {
  140. $begin_time = $date;
  141. $end_time = date("Y-m-d", strtotime($begin_time) + 86400);
  142. return self::select([DB::Raw("sum(price) as success_amount,count(1) as paid_number")])
  143. ->where('distribution_channel_id', $distribution_channel_id)
  144. ->where('created_at', '>=', $begin_time)
  145. ->where('created_at', '<', $end_time)
  146. ->where('status', 'PAID')
  147. ->first();
  148. }
  149. //获取渠道对应支付通道总额
  150. static function getPayMerchantSourceAmount($params)
  151. {
  152. $search_obj = self::select([DB::Raw("pay_merchant_source,sum(price) as success_amount")], 'pay_merchant_source')->where('status', 'PAID');
  153. if (isset($params['distribution_channel_id']) && $params['distribution_channel_id']) $search_obj->where('distribution_channel_id', $params['distribution_channel_id']);
  154. if (isset($params['begin_time']) && $params['begin_time']) $search_obj->where('created_at', '>=', $params['begin_time']);
  155. if (isset($params['end_time']) && $params['end_time']) $search_obj->where('created_at', '<=', $params['end_time']);
  156. if (isset($params['not_in_pay_merchant_id']) && count($params['not_in_pay_merchant_id']) > 0) {
  157. $search_obj->whereNotIn('pay_merchant_id', $params['not_in_pay_merchant_id']);
  158. } else {
  159. }
  160. return $search_obj->groupBy('pay_merchant_source')->pluck('success_amount', 'pay_merchant_source')->toArray();
  161. }
  162. //获取付费用户数
  163. static function getPayUserNum($send_order_id)
  164. {
  165. return self::where('send_order_id', $send_order_id)->where('status', 'PAID')->distinct('uid')->count('uid');
  166. }
  167. //获取普通付费用户数
  168. static function getNormalPayUserNum($send_order_id)
  169. {
  170. return self::where('send_order_id', $send_order_id)->where('order_type', 'RECHARGE')->where('status', 'PAID')->distinct('uid')->count('uid');
  171. }
  172. //获取VIP付费用户数
  173. static function getVipPayUserNum($send_order_id)
  174. {
  175. return self::where('send_order_id', $send_order_id)->where('order_type', 'YEAR')->where('status', 'PAID')->distinct('uid')->count('uid');
  176. }
  177. //获取派单下的订单总数
  178. static function getOrderCount($send_order_id)
  179. {
  180. return self::where('send_order_id', $send_order_id)->where('status', 'PAID')->count();
  181. }
  182. //获取活动的订单总数
  183. static function getActivityOrderNum($params = [])
  184. {
  185. $search_obj = self::orderBy('created_at', 'desc');
  186. if (isset($params['uid']) && $params['uid']) $search_obj->where('uid', $params['uid']);
  187. if (isset($params['status']) && $params['status']) $search_obj->where('status', $params['status']);
  188. if (isset($params['activity_id']) && $params['activity_id']) $search_obj->where('activity_id', $params['activity_id']);
  189. if (isset($params['begin_time']) && $params['begin_time']) $search_obj->where('created_at', '>=', $params['begin_time']);
  190. if (isset($params['end_time']) && $params['end_time']) $search_obj->where('created_at', '<=', $params['end_time']);
  191. if (isset($params['distribution_channel_id']) && $params['distribution_channel_id']) $search_obj->where('distribution_channel_id', $params['distribution_channel_id']);
  192. return $search_obj->count();
  193. }
  194. static function getByTradeNo($distribution_channel_id, $trade_no)
  195. {
  196. return self::where('distribution_channel_id', $distribution_channel_id)->where('trade_no', $trade_no)->first();
  197. }
  198. //获取派单下的普通用户订单总数
  199. static function getNormalOrderCount($send_order_id)
  200. {
  201. return self::where('send_order_id', $send_order_id)->where('order_type', 'RECHARGE')->where('status', 'PAID')->count();
  202. }
  203. //获取派单下的VIP用户的订单总数
  204. static function getVipOrderCount($send_order_id)
  205. {
  206. return self::where('send_order_id', $send_order_id)->where('order_type', 'YEAR')->where('status', 'PAID')->count();
  207. }
  208. //获取渠道日付费用户数
  209. static function getDayPayUserNumByChannelId($distribution_channel_id, $date)
  210. {
  211. $begin_time = $date;
  212. $end_time = date("Y-m-d", strtotime($date) + 86400);
  213. return self::where('distribution_channel_id', $distribution_channel_id)
  214. ->where('created_at', '>=', $begin_time)
  215. ->where('created_at', '<', $end_time)
  216. ->where('status', 'PAID')
  217. ->distinct('uid')
  218. ->count('uid');
  219. }
  220. //获取渠道日包年vip付费用户数
  221. static function getDayVipPayUserNumByChannelId($distribution_channel_id, $date)
  222. {
  223. $begin_time = $date;
  224. $end_time = date("Y-m-d", strtotime($date) + 86400);
  225. return self::where('distribution_channel_id', $distribution_channel_id)
  226. ->where('created_at', '>=', $begin_time)
  227. ->where('created_at', '<', $end_time)
  228. ->where('status', 'PAID')
  229. ->where('order_type', 'YEAR')
  230. ->distinct('uid')
  231. ->count('uid');
  232. }
  233. //获取渠道日普通充值付费用户数
  234. static function getDayRechargePayUserNumByChannelId($distribution_channel_id, $date)
  235. {
  236. $begin_time = $date;
  237. $end_time = date("Y-m-d", strtotime($date) + 86400);
  238. return self::where('distribution_channel_id', $distribution_channel_id)
  239. ->where('created_at', '>=', $begin_time)
  240. ->where('created_at', '<', $end_time)
  241. ->where('status', 'PAID')
  242. ->where('order_type', 'RECHARGE')
  243. ->distinct('uid')
  244. ->count('uid');
  245. }
  246. //获取指定日期普通充值未支付订单数、支付订单数、总额
  247. static function getChannelDayTicketRechargeData($distribution_channel_id, $date)
  248. {
  249. $begin_time = $date;
  250. $end_time = date("Y-m-d", strtotime($date) + 86400);
  251. $paid_info = self::select([DB::Raw("sum(price) as success_amount,count(1) as paid_num")])
  252. ->where('distribution_channel_id', $distribution_channel_id)
  253. ->where('created_at', '>=', $begin_time)
  254. ->where('created_at', '<', $end_time)
  255. ->where('status', 'PAID')
  256. ->where('order_type', 'RECHARGE')
  257. ->first();
  258. $unpaid_count = self::where('distribution_channel_id', $distribution_channel_id)
  259. ->where('created_at', '>=', $begin_time)
  260. ->where('created_at', '<', $end_time)
  261. ->where('order_type', 'RECHARGE')
  262. ->where('status', 'UNPAID')
  263. ->count();
  264. return [
  265. 'ticket_recharge_paid_num' => $paid_info->paid_num,
  266. 'ticket_recharge_amount' => (float)$paid_info->success_amount,
  267. 'ticket_recharge_unpaid_num' => $unpaid_count
  268. ];
  269. }
  270. //获取指定日期包年充值未支付订单数、支付订单数、总额
  271. static function getChannelDayYearRechargeData($distribution_channel_id, $date)
  272. {
  273. $begin_time = $date;
  274. $end_time = date("Y-m-d", strtotime($date) + 86400);
  275. $paid_info = self::select([DB::Raw("sum(price) as success_amount,count(1) as paid_num")])
  276. ->where('distribution_channel_id', $distribution_channel_id)
  277. ->where('created_at', '>=', $begin_time)
  278. ->where('created_at', '<', $end_time)
  279. ->where('status', 'PAID')
  280. ->where('order_type', 'YEAR')
  281. ->first();
  282. $unpaid_count = self::where('distribution_channel_id', $distribution_channel_id)
  283. ->where('created_at', '>=', $begin_time)
  284. ->where('created_at', '<', $end_time)
  285. ->where('order_type', 'YEAR')
  286. ->where('status', 'UNPAID')
  287. ->count();
  288. return [
  289. 'year_recharge_paid_num' => $paid_info->paid_num,
  290. 'year_recharge_amount' => (float)$paid_info->success_amount,
  291. 'year_recharge_unpaid_num' => $unpaid_count
  292. ];
  293. }
  294. //获取渠道日首充数据
  295. static function getChannelDayFirstRechargeData($distribution_channel_id, $date)
  296. {
  297. $begin_time = $date;
  298. $end_time = date("Y-m-d", strtotime($date) + 86400);
  299. $first_data = DB::select("select count(distinct uid) count,sum(price) amount from orders a where distribution_channel_id = {$distribution_channel_id} and created_at>'{$begin_time}' and created_at<'{$end_time}' and status ='PAID' and not exists (select uid from orders where a.uid = uid and created_at < '{$begin_time}' and status= 'PAID' and distribution_channel_id = {$distribution_channel_id} limit 1)");
  300. return [
  301. "count" => (int)$first_data[0]->count,
  302. "amount" => (float)$first_data[0]->amount
  303. ];
  304. }
  305. //获取派单累计充值(追踪用户)
  306. static function getPromotionRegUserRechargeAmount($params = [])
  307. {
  308. $send_order_id = isset($params['send_order_id']) ? $params['send_order_id'] : 0;
  309. $end_time = isset($params['end_time']) ? $params['end_time'] : date('Y-m-d H:i:s');
  310. if ($send_order_id) {
  311. $data = DB::select("select sum(price) amount from orders where status='PAID' and created_at <= '{$end_time}' and uid in (select id from users where send_order_id = '{$send_order_id}' )");
  312. return (float)$data[0]->amount;
  313. }
  314. }
  315. static function getRechargeAmountGroupByOfficial($date)
  316. {
  317. $search_obj = self::orderBy('orders.id', 'desc')->join('force_subscribe_users', 'orders.uid', '=', 'force_subscribe_users.uid')
  318. ->join('official_accounts', 'force_subscribe_users.appid', '=', 'official_accounts.appid')->groupBy('official_accounts.appid')->groupBy('orders.distribution_channel_id');
  319. if ($date) {
  320. $search_obj->where('orders.pay_end_at', '>=', $date . ' 00:00:00');
  321. $search_obj->where('orders.pay_end_at', '<=', $date . ' 23:59:59');
  322. }
  323. $search_obj->where('orders.status', 'PAID');
  324. $data = $search_obj->select(DB::raw('sum(orders.price) as recharge_amount'), 'official_accounts.nickname', 'official_accounts.appid', 'orders.distribution_channel_id')->get()->toArray();
  325. $chanenelRechargeAmount = [];
  326. foreach ($data as $item) {
  327. $distribution_channel_id = $item['distribution_channel_id'];
  328. if (!isset($chanenelRechargeAmount[$distribution_channel_id])) {
  329. $chanenelRechargeAmount[$distribution_channel_id] = 0;
  330. }
  331. $chanenelRechargeAmount[$distribution_channel_id] += (float)$item['recharge_amount'];
  332. }
  333. foreach ($data as &$dataItem) {
  334. $dataItem['date'] = $date;
  335. $dataItem['created_at'] = date('Y-m-d H:i:s');
  336. $dataItem['updated_at'] = date('Y-m-d H:i:s');
  337. foreach ($chanenelRechargeAmount as $key => $chanenelRechargeAmountItem) {
  338. if ($dataItem['distribution_channel_id'] == $key) {
  339. $dataItem['channel_recharge_amount'] = $chanenelRechargeAmountItem;
  340. }
  341. }
  342. }
  343. return $data;
  344. }
  345. static function getRechargeAmountGroupByOfficialAccount($date)
  346. {
  347. $search_obj = self::orderBy('id', 'desc')->where('status', 'PAID')->select('uid', 'price', 'distribution_channel_id');
  348. if ($date) {
  349. $search_obj->where('created_at', '>=', $date . ' 00:00:00');
  350. $search_obj->where('created_at', '<=', $date . ' 23:59:59');
  351. }
  352. $result = $search_obj->get();
  353. $official_accounts_result = DB::table('official_accounts')->select('appid', 'nickname')->get();
  354. $temp_official_account = [];
  355. foreach ($official_accounts_result as $official_accounts_result_item) {
  356. $temp_official_account[$official_accounts_result_item->appid] = $official_accounts_result_item->nickname;
  357. }
  358. $temp_channel = [];
  359. $temp_channel_charge_amount = [];
  360. foreach ($result as $item) {
  361. if (!isset($temp_channel[$item->distribution_channel_id])) {
  362. $temp_channel[$item->distribution_channel_id] = [];
  363. }
  364. if (!isset($temp_channel_charge_amount[$item->distribution_channel_id])) {
  365. $temp_channel_charge_amount[$item->distribution_channel_id] = 0;
  366. }
  367. $force_subscribe_users_result = DB::table('force_subscribe_users')->where('uid', $item->uid)->where('is_subscribed', 1)->select('appid', 'distribution_channel_id')->first();
  368. if (!$force_subscribe_users_result) {
  369. $force_subscribe_users_result = DB::table('force_subscribe_users')->where('uid', $item->uid)->where('is_subscribed', 0)->select('appid', 'distribution_channel_id')->first();
  370. }
  371. if ($force_subscribe_users_result) {
  372. $temp_channel[$item->distribution_channel_id][$force_subscribe_users_result->appid][] = $item->price;
  373. } else {
  374. $temp_channel[$item->distribution_channel_id]['unknown'][] = $item->price;
  375. }
  376. $temp_channel_charge_amount[$item->distribution_channel_id] += $item->price;
  377. }
  378. //\Log::info($temp_channel);
  379. $finalArray = [];
  380. foreach ($temp_channel as $key => $temp_channel_item) {
  381. foreach ($temp_channel_item as $appid => $price) {
  382. $finalArray[] = ['date' => $date,
  383. 'nickname' => isset($temp_official_account[$appid]) ? $temp_official_account[$appid] : 'unknown',
  384. 'appid' => $appid,
  385. 'distribution_channel_id' => $key,
  386. 'recharge_amount' => array_sum($price),
  387. 'channel_recharge_amount' => $temp_channel_charge_amount[$key],
  388. 'created_at' => date('Y-m-d H:i:s'),
  389. 'updated_at' => date('Y-m-d H:i:s')];
  390. }
  391. }
  392. return $finalArray;
  393. }
  394. public static function getOrdersByActivityId($channelId, $createdAt, $activityId)
  395. {
  396. $result = self::select('uid', 'status', 'price', 'activity_id', 'product_id')
  397. ->where('distribution_channel_id', $channelId)
  398. ->where('created_at', '>=', $createdAt)
  399. ->where('activity_id', $activityId)
  400. ->get();
  401. return $result ? $result->toArray() : [];
  402. }
  403. public static function getUserLastestOrder($uid)
  404. {
  405. if (empty($uid)) {
  406. return [];
  407. }
  408. $result = self::where('uid', $uid)->where('status', 'PAID')->orderBy('id')->limit(1)->get();
  409. return $result ? $result->toArray() : [];
  410. }
  411. }