Nagent_countwater.php 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. <?php
  2. namespace App\Models;
  3. use Illuminate\Support\Facades\Log;
  4. use DB;
  5. /**
  6. *
  7. */
  8. class Nagent_countwater extends BaseModel {
  9. protected $table = 'nagent_countwater';
  10. public $timestamps = false;
  11. //获取对应时间区间代理业绩及佣金相关数据
  12. protected function SettleData($wtime,$gid){
  13. DB::connection()->enableQueryLog();
  14. $sql = "SELECT agent_water,zt_water,group_water,sum_water,game_water,count_time FROM nagent_countwater WHERE ";
  15. if(is_array($wtime)){
  16. $sql .= "count_time In ('" . $wtime[0] . "','" . $wtime[1] . "')";
  17. }else{
  18. $sql .= "count_time='" . $wtime . "'";
  19. }
  20. $sql .= " and time_type=2 and agent_identity IN (SELECT agent_identity FROM nagent_detailed WHERE parent_id='" . $gid . "')";
  21. $snwater = DB::select ($sql);
  22. $snwater = json_encode ($snwater);
  23. $snwater = json_decode ($snwater, 1); //直推会员业绩查询
  24. $uwater = $this->select('agent_water','zt_water','group_water','sum_water','game_water','count_time')->where('agent_identity',$gid);
  25. if(is_array($wtime)){
  26. $uwater = $uwater->whereIn('count_time',$wtime);
  27. }else{
  28. $uwater = $uwater->where('count_time',$wtime);
  29. }
  30. $uwater = $uwater->where('time_type',2)->where('status',1)->first();
  31. $resdata = array(
  32. 'ae' => 0.00, //团队业绩
  33. 'sae' => 0.00, //直推会员业绩
  34. 'gae' => 0.00, //直属代理业绩
  35. 'saemoney' => 0.00, //直推会员佣金
  36. 'gaemoney' => 0.00, //直属代理佣金
  37. 'aemoney' => 0.00, //团队佣金
  38. );
  39. if(!$uwater || count($uwater->toArray())<1)return $resdata;
  40. $ogames = \App\Models\GameType::getOutWatergame();
  41. $uwater = $uwater->toArray();
  42. $uwater = $this->OutGameData($uwater,$uwater['game_water'],$ogames);
  43. $resdata['ae'] = $uwater['sum_water'];
  44. $resdata['sae'] = $uwater['zt_water'];
  45. $resdata['gae'] = $uwater['group_water'];
  46. //获取佣金比例及对应等级、计算代理佣金
  47. $mgrade = "\App\Models\NagentGrade";
  48. $grades = $mgrade::getGrades();
  49. $ratio = empty($grades)?$grades:$mgrade::getGradeBymoney($uwater['sum_water'],$grades);
  50. if(empty($ratio))return $resdata;
  51. $resdata['ratio'] = $ratio;
  52. $resdata['saemoney'] = round($resdata['sae']*($ratio['water_ratio']/100),2);
  53. $resdata['aemoney'] = $resdata['saemoney'] + $resdata['gaemoney'];
  54. if(!$snwater || count($snwater)<1)return $resdata;
  55. //直属代理佣金计算
  56. foreach ($snwater as $k => $v) {
  57. $kwater = $this->OutGameData($v,$v['game_water'],$ogames,'sum_water');
  58. $gratio = empty($grades)?$grades:$mgrade::getGradeBymoney($kwater['sum_water'],$grades);
  59. if(empty($gratio))continue;
  60. $cratio = $ratio['water_ratio'] - $gratio['water_ratio'];
  61. $resdata['gaemoney'] += round($kwater['sum_water']*($cratio/100),2);
  62. }
  63. $resdata['gaemoney'] = ($resdata['gaemoney']<0)?0:$resdata['gaemoney'];
  64. $resdata['aemoney'] = $resdata['saemoney'] + $resdata['gaemoney'];
  65. return $resdata;
  66. }
  67. //过滤不计入流水游戏业绩
  68. private function OutGameData($water,$gwater,$games,$key=''){
  69. if(!is_array($games) || count($games)<1)return $water;
  70. $gwater = json_decode($gwater,1);
  71. foreach ($games as $k => $v) {
  72. if(empty($key)){
  73. $water['agent_water'] = isset($gwater[$v['table_name']]['agent_water'])?($water['agent_water']-$gwater[$v['table_name']]['agent_water']):$water['agent_water'];
  74. $water['zt_water'] = isset($gwater[$v['table_name']]['zt_water'])?($water['zt_water']-$gwater[$v['table_name']]['zt_water']):$water['zt_water'];
  75. $water['group_water'] = isset($gwater[$v['table_name']]['group_water'])?($water['group_water']-$gwater[$v['table_name']]['group_water']):$water['group_water'];
  76. $water['sum_water'] = isset($gwater[$v['table_name']]['sum_water'])?($water['sum_water']-$gwater[$v['table_name']]['sum_water']):$water['sum_water'];
  77. }else{
  78. $water[$key] = isset($gwater[$v['table_name']][$key])?($water[$key]-$gwater[$v['table_name']][$key]):$water[$key];
  79. }
  80. }
  81. return $water;
  82. }
  83. //根据ID更新数据
  84. protected function updateDataByID($id,$udata){
  85. $res = $this->where('id',$id)->update($udata);
  86. if($res<1)return -8505012802;
  87. return 1;
  88. }
  89. //批量更新
  90. protected function updateBatch($multipleData)
  91. {
  92. try{
  93. $tableName = $this->table; // 表名
  94. $firstRow = current($multipleData);
  95. $updateColumn = array_keys($firstRow);
  96. // 默认以id为条件更新,如果没有ID则以第一个字段为条件
  97. $referenceColumn = isset($firstRow['id']) ? 'id' : current($updateColumn);
  98. unset($updateColumn[0]);
  99. // 拼接sql语句
  100. $sql = "UPDATE " . $tableName . " SET ";
  101. $ids = '';
  102. $bindings = [];
  103. foreach ($updateColumn as $uColumn) {
  104. $sql .= $uColumn . " = CASE ";
  105. foreach ($multipleData as $data) {
  106. $sql .= "WHEN " . $referenceColumn . " = $data[$referenceColumn] THEN '$data[$uColumn]' ";
  107. $ids .= $data[$referenceColumn] . ',';
  108. }
  109. $sql .= "ELSE " . $uColumn . " END,";
  110. }
  111. $sql = trim($sql,',');
  112. $ids = trim($ids,',');
  113. $sql .= " WHERE " . $referenceColumn . " IN (" . $ids . ")";
  114. // 传入预处理sql语句和对应绑定数据
  115. $res = DB::update($sql);
  116. return $res;
  117. } catch (\Exception $e) {
  118. return -8505013302;
  119. }
  120. }
  121. //更新或添加代理业绩统计数据
  122. protected function udadData($indata,$udata){
  123. if(!empty($udata)){
  124. $updateinfo = array();
  125. foreach ($udata as $k => $v) {
  126. foreach ($v as $sk => $sv) {
  127. unset($sv['agent_identity']);
  128. unset($sv['agent_user']);
  129. unset($sv['count_time']);
  130. unset($sv['status']);
  131. unset($sv['time_type']);
  132. unset($sv['sort']);
  133. $updateinfo[] = $sv;
  134. }
  135. }
  136. $res = $this->updateBatch($updateinfo);
  137. if(is_numeric($res) && $res<0)return $res;
  138. }
  139. if (!empty($indata)) {
  140. $indata = array_values($indata);
  141. $res = $this->insert($indata);
  142. if ($res < 1)return $res;
  143. }
  144. return 1;
  145. }
  146. }
  147. ?>