TeamDymicFree.php 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. <?php
  2. declare (strict_types = 1);
  3. namespace app\api\command;
  4. use app\common\model\UserModel;
  5. use think\console\Command;
  6. use think\console\Input;
  7. use think\console\Output;
  8. use think\facade\Db;
  9. class TeamDymicFree extends Command
  10. {
  11. private $arr_addinc = [];
  12. protected function configure()
  13. {
  14. // 团队收益
  15. $this->setName('team_dymic_free')
  16. ->setDescription('the team_cymic_free command');
  17. }
  18. protected function execute(Input $input, Output $output)
  19. {
  20. // 给用户添加today_money 数组
  21. $this->arr_addinc = array();
  22. Db::startTrans();
  23. try {
  24. $list = Db::name('box_handle')->where('is_team_handle', '0')->order('id desc')->select();
  25. $model_user = new UserModel();
  26. $id_backs = [];
  27. foreach ($list as $key=>&$val){
  28. // 这是测试 上线要干掉
  29. $output->writeln('key'.$key);
  30. $user_info = Db::name('user')->where('id', $val['uid'])->find();
  31. if($user_info && $user_info['pid'] > 0){
  32. // $output->writeln('key'.$val['id']);
  33. $id_backs[] = $val['id'];
  34. // $total_income = $val['num'] * env('boxsetting.ONE_BOX_PRICE');
  35. // $output->writeln(json_encode($setting_arr));
  36. $settings = Db::name('level_setting')->order('id asc')->field('level,dynamic_scale,zt_money')->select()->toArray();
  37. $setting_arr = array();
  38. $setting_arr_zt = array();
  39. foreach ($settings as $key1=>$val1){
  40. $setting_arr[$val1['level']] = $val1['dynamic_scale'];
  41. $setting_arr_zt[$val1['level']] = $val1['zt_money'];
  42. }
  43. // $output->writeln('key'.json_encode($setting_arr));
  44. // $output->writeln('key'.json_encode($setting_arr_zt));
  45. // 计算直推收益
  46. $pidinfo = $model_user->where('id', $user_info['pid'])->find();
  47. // $output->writeln('key'.$pidinfo['level']);
  48. if ($pidinfo['has_fd'] == 1){
  49. if ($pidinfo['level'] == 0) {
  50. $money = env('TEAMSETTING.DICRECT_MONEY');
  51. edit_user_money(5, $pidinfo['id'], $money, 0, $val['id']);
  52. // Db::name('user')->where('id', $pidinfo['id'])->inc('today_money', floatval($money))->update();
  53. $this->setUserIncMoney($pidinfo['id'], floatval($money), $input, $output);
  54. }else{
  55. // sr_throw(json_encode($setting_arr_zt));
  56. $money = $setting_arr_zt[$pidinfo['level']];
  57. edit_user_money(5, $pidinfo['id'], $money, 0, $val['id']);
  58. // Db::name('user')->where('id', $pidinfo['id'])->inc('today_money', floatval($money))->update();
  59. $this->setUserIncMoney($pidinfo['id'], floatval($money), $input, $output);
  60. }
  61. }
  62. $path = $user_info['path'];
  63. // 计算团队并且 除开扶持号
  64. if (!empty($path)){
  65. $arr = explode(',', $path);
  66. $arr = array_reverse($arr);
  67. $ids = $arr;
  68. $ids = implode(',',$ids);
  69. $order= 'field(id,'.$ids.')';
  70. $users = Db::name('user')->where('id','in' ,$arr)->field('id,level')->order(Db::raw($order))->select()->toArray();
  71. // 分钱的数组 ['uid'=>'money']
  72. $get_money_arr = array();
  73. $cur_bobi = 0;
  74. $cur_maxlevel = 0;
  75. foreach ($users as $key1=>$val1){
  76. if ($key1 == 0){
  77. if ($val1['level']>0){
  78. $bobi = $setting_arr[$val1['level']];
  79. $get_money_arr[$val1['id']] = $bobi;
  80. $cur_maxlevel = $val1['level'];
  81. $cur_bobi += $bobi;
  82. }
  83. }else{
  84. if ($val1['level'] > $users[$key1-1]['level']){
  85. if ($val1['level'] > $cur_maxlevel){
  86. $bobi = $setting_arr[$val1['level']] - $cur_bobi;
  87. if ($bobi > 0){
  88. $get_money_arr[$val1['id']] = $bobi;
  89. $cur_bobi += $bobi;
  90. }
  91. }
  92. } else{
  93. }
  94. }
  95. }
  96. // $output->writeln('get_money:'.json_encode($get_money_arr));
  97. // 计算前面相同等级收益
  98. foreach ($users as $key1=>$val1){
  99. if ($key1 != 0){
  100. if ($val1['level'] == $users[$key1-1]['level']){
  101. if (isset($get_money_arr[$users[$key1-1]['id']])){
  102. if ($get_money_arr[$users[$key1-1]['id']] > 0){
  103. $last_bobi = $get_money_arr[$users[$key1-1]['id']];
  104. $get_money_arr[$val1['id']] = $last_bobi * 0.1;
  105. }
  106. }
  107. }
  108. }
  109. }
  110. // $get_money_arr 用户团队最终金额
  111. foreach ($get_money_arr as $key1=>$val1){
  112. // $get_money_arr[$key1] = sprintf("%.4f",substr(sprintf("%.5f", $val1/100*$total_income), 0, -2));
  113. $get_money_arr[$key1] = sprintf("%.4f",substr(sprintf("%.5f", $val1), 0, -2));
  114. }
  115. // $output->writeln(json_encode($get_money_arr));
  116. foreach ($get_money_arr as $key1=>$val1){
  117. // $get_money_arr 里面是计算百分比
  118. $cur_info = Db::name('user')->where('id', $key1)->find();
  119. if ($cur_info['has_fd'] == 1){
  120. edit_user_money(7, $key1, $val1);
  121. // Db::name('user')->where('id', $key1)->inc('today_money', floatval($val1))->update();
  122. $this->setUserIncMoney($key1, floatval($val1), $input, $output);
  123. }
  124. }
  125. }
  126. }else{
  127. $id_backs[] = $val['id'];
  128. }
  129. }
  130. // 改变所有已经处理状态
  131. Db::name('box_handle')->whereIn('id', $id_backs)->save([
  132. 'is_team_handle'=>1
  133. ]);
  134. // sr_throw(json_encode($this->arr_addinc));
  135. foreach ($this->arr_addinc as $key=>$val){
  136. Db::name('user')->where('id', $key)->inc('today_money', floatval($val))->update();
  137. }
  138. Db::commit();
  139. }catch (\Exception $e){
  140. Db::rollback();
  141. $output->writeln('error:'.$e->getMessage());
  142. }
  143. return 22;
  144. }
  145. private function setUserIncMoney($key, $money, $input, $output){
  146. // $output->writeln('key'.$key.'--money:'.$money);
  147. if (isset($this->arr_addinc[strval($key)]) && $this->arr_addinc[strval($key)] > 0){
  148. $this->arr_addinc[strval($key)] = ($this->arr_addinc[strval($key)] + $money);
  149. }else{
  150. $this->arr_addinc[strval($key)] = $money;
  151. }
  152. }
  153. }