RewardSort.php 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <?php
  2. namespace addons\Agent\common\logic\reward;
  3. use addons\Agent\common\enums\ComputingEnum;
  4. class RewardSort
  5. {
  6. /**
  7. * 按客户需求进行数据排序(同一种类型在一起,并且按等级从低到高。优先极差,平级,其他的奖励类型无所谓)
  8. * 写入等级就按大到小,查询出来是倒叙就是从小到大了
  9. *
  10. * @param array $insert_wallet
  11. *
  12. * @return array
  13. */
  14. public static function insertWalletSort(array $insert_wallet): array
  15. {
  16. if (empty($insert_wallet)) {
  17. return $insert_wallet;
  18. }
  19. // 按关系练从大到小,查的时候倒叙,就是从小到大了
  20. $insert_wallet = array_reverse($insert_wallet);
  21. $sortArr = [];
  22. array_walk($insert_wallet, function ($item) use (&$sortArr) {
  23. // 平1 平2 放一起
  24. if (in_array($item['capital_type'], [ComputingEnum::EXTRA_EQUAL_PRIZE_1, ComputingEnum::EXTRA_EQUAL_PRIZE_2], true)) {
  25. $sortArr[ComputingEnum::EXTRA_EQUAL_PRIZE_1][] = $item;
  26. return;
  27. }
  28. $sortArr[$item['capital_type']][] = $item;
  29. });
  30. array_walk($sortArr, function (&$item) {
  31. // 按level降序
  32. usort($item, function ($s1, $s2) {
  33. $res = $s1['seller_level'] <=> $s2['seller_level'];
  34. if ($res === 0) {
  35. return 0;
  36. }
  37. return $res === 1 ? - 1 : 1;
  38. });
  39. });
  40. $teamPrize = [];
  41. $equalPrize = [];
  42. $equalPrize1 = [];
  43. if (isset($sortArr[ComputingEnum::TEAM_PRIZE])) {
  44. $teamPrize = $sortArr[ComputingEnum::TEAM_PRIZE];
  45. unset($sortArr[ComputingEnum::TEAM_PRIZE]);
  46. }
  47. if (isset($sortArr[ComputingEnum::EQUAL_PRIZE])) {
  48. $equalPrize = $sortArr[ComputingEnum::EQUAL_PRIZE];
  49. unset($sortArr[ComputingEnum::EQUAL_PRIZE]);
  50. }
  51. if (isset($sortArr[ComputingEnum::EXTRA_EQUAL_PRIZE_1])) {
  52. $equalPrize1 = $sortArr[ComputingEnum::EXTRA_EQUAL_PRIZE_1];
  53. unset($sortArr[ComputingEnum::EXTRA_EQUAL_PRIZE_1]);
  54. }
  55. $res = [];
  56. if ($sortArr) {
  57. $res = array_merge($res, array_merge(...array_values($sortArr)));
  58. }
  59. return array_merge($res, $equalPrize, $equalPrize1, $teamPrize);
  60. }
  61. }