| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438 |
- <?php
- namespace App\Models;
- use DB;
- class NagentCountrecord extends BaseModel {
- protected $table = "nagent_countrecord";
- public $timestamps = false;
-
- //验证游戏对应期号代理业绩是否统计
- protected function checkIscount($game,$no){
- $res = $this->where('game',$game)->where('no',$no)->first();
- if($res && $res->status==1)return -8505013002; //本期游戏已统计
- if(!$res)return array();
- return $res->toArray();
- }
- //获取对应游戏对应期代理业绩
- protected function getWaterBygn($game,$no,$uid='',$page=1,$total=1){
- DB::connection()->enableQueryLog();
- $buyobj = '\App\Models\Game' . ucfirst($game) . '_Buy'; //游戏注单表模型
- $buyinfo = $buyobj::select(DB::raw("cast(account_identity as uuid),sum(money) as money")); //投注数据获取
- if(!empty($uid)){
- $buyinfo = $buyinfo->where('account_identity',$uid); //获取指定用户注单数据
- }
- $nno = array();
- if(is_array($no)){ //多期游戏投注数据获取
- $redata = array();
- $tno = array();
- if(!empty($uid)){
- $iscountno = $this->select('no')->where('game',$game)->where('status',1)->whereIn('no',$no)->get();
- if($iscountno && count($iscountno->toArray())>0){
- foreach ($iscountno->toArray() as $k => $v) {
- $tno[] = $v['no'];
- }
- }
- foreach ($no as $k => $v) {
- if(in_array($v, $tno))continue;
- $nno[] = $v;
- }
- }
- //删除原已统计游戏期记录
- $res = $this->where('game',$game)->whereIn('no',$no)->delete();
- //添加新统计游戏期记录
- foreach ($no as $key => $value) {
- $redata[] = array(
- 'game' => $game,
- 'no' => $value,
- 'status' => 1,
- );
- }
- $res = $this->insert($redata);
- if($res<0)return -8505013102;
- //按用户分组获取投注金额
- $buyinfo = $buyinfo->whereIn('no',$no);
- }else{
- //验证并更新或添加游戏期统计记录
- if($page==1){
- $res = $this->checkUpinData($game,$no);
- if(is_numeric($res))return $res;
- }
- //按用户分组获取投注金额
- $buyinfo = $buyinfo->where('no',$no);
- $sumcount = $buyinfo->where('delstatus',1)->groupBy('account_identity')->count();
- if(empty($sumcount) || $sumcount<1)return 1;
- $total = (empty($total) || !is_numeric($total) || $total<1)?1:$total;
- $page = (empty($page) || !is_numeric($page) || $page<1)?1:$page;
- $limit = ceil($sumcount/$total);
- $offset = ($page-1) * $limit;
- $buyinfo = $buyinfo->limit($limit)->offset($offset);
- }
- $buyinfo = $buyinfo->where('delstatus',1)->groupBy('account_identity')->get();
- /*$queries = DB::getQueryLog();
- print_r($queries);*/
- if(!$buyinfo || count($buyinfo->toArray())<1)return 1;
- $buyinfo = $buyinfo->toArray();
- if(!empty($nno)){
- $tbinfo = $buyobj::select(DB::raw("account_identity,sum(money) as money"))->where('delstatus',1)->where('account_identity','<>',$uid)->whereIn('no',$nno)->groupBy('account_identity')->get();
- if($tbinfo && count($tbinfo->toArray())>0)$buyinfo = array_merge($buyinfo,$tbinfo->toArray());
- }
- return $buyinfo;
- }
- //是否统计游戏对应期验证及更新
- protected function checkUpinData($game,$no){
- $record = $this->checkIscount($game,$no); //验证当期游戏数据是否已统计
- if($record<0)return 1;
- //更新或添加将统计期游戏记录
- $redata = array(
- 'game' => $game,
- 'no' => $no,
- 'status' => 1,
- );
- $res = $this->addOrUpdate($record,$redata);
- if($res<0)return $res;
- return array();
- }
- //整理统一代理业绩数据
- protected function handleWater($gameinfo,$game,$arr,$uid=''){
- $sgi = array(); //按日期分组汇总年月日、对应日期期号组
- foreach ($gameinfo as $k => $v) {
- $date = date('Y-m-d',strtotime($v['open_time']));
- $sgi[$date]['open_time'] = $date;
- $sgi[$date]['no'][] = $v['info_no'];
- }
- //获取整理各用户对应日期业绩
- foreach ($sgi as $pk => $pv) {
- $buyinfo = $this->getWaterBygn($game,$pv['no'],$uid); //获取对应游戏指定期投注信息
- if(is_numeric($buyinfo))continue;
- foreach ($buyinfo as $k => $v) {
- if(empty($v['account_identity']))continue;
- $arr['buyinfo'][$v['account_identity']][$game] = $v['money'];
- if(!in_array($v['account_identity'], $arr['uid']))
- $arr['uid'][] = $v['account_identity'];
- $arr['pid'][$v['account_identity']] = array();
- }
- }
- return $arr;
- }
- //真人游戏代理业绩数据获取处理
- protected function getRealData($game,$arr,$stime,$etime,$uid=''){
- $date = date('Y-m-d',strtotime($stime));
- $buyobj = '\\App\\Model\\' . ucfirst($game) . '_betting_ogrbv'; //游戏注单表模型
- $stime = strtotime($stime);
- $etime = strtotime($etime);
- if($game=='kygame' || $game == 'lcqpgame'|| $game == 'lygame'){
- $tkey = 'GameEndTime';
- $buyinfo = $buyobj::select(DB::raw('cast(account_identity as uuid),sum("AllBet") as money')); //投注数据获取
- }else if($game=='aggame'){
- $tkey = 'recalcuTime';
- $buyinfo = $buyobj::select(DB::raw('cast(account_identity as uuid),sum("betAmount") as money')); //投注数据获取
- }else if($game=='hjgame'){
- $tkey = 'bet_time';
- $buyinfo = $buyobj::select(DB::raw('cast(account_identity as uuid),sum("bet_amount") as money')); //投注数据获取
- }else{
- $tkey = 'AddTime';
- $buyinfo = $buyobj::select(DB::raw('cast(account_identity as uuid),sum("BettingAmount") as money')); //投注数据获取
- }
- $updatestatus = $buyobj::where('count_status',2);
- if(!empty($uid)){
- $buyinfo = $buyinfo->where('account_identity',$uid); //获取指定用户注单数据
- $updatestatus = $updatestatus->where('account_identity',$uid);
- }
- //更新游戏统计状态为已统计
- $updatestatus = $updatestatus->update(['count_status'=>1]);
- if($updatestatus<0)return -8505013102;
- //按用户分组获取投注金额
- $buyinfo = $buyinfo->where($tkey,'>=',$stime)->where($tkey,'<=',$etime)->groupBy('account_identity')->get();
- /*$queries = DB::getQueryLog();
- print_r($queries);*/
- if(!$buyinfo || count($buyinfo->toArray())<1)return $arr;
- foreach ($buyinfo->toArray() as $k => $v) {
- if(empty($v['account_identity']))continue;
- $arr['buyinfo'][$v['account_identity']][$game] = $v['money'];
- if(!in_array($v['account_identity'], $arr['uid']))
- $arr['uid'][] = $v['account_identity'];
- $arr['pid'][$v['account_identity']] = array();
- }
- return $arr;
- }
- //代理业绩计算
- protected function CountWaters($uinfo,$ctime)
- {
- $nagent = '\App\Models\Nagent_detailed';
- $nagentwater = '\App\Models\Nagent_countwater';
- //获取已统计数据
- $waterInfo = $nagentwater::whereIn('count_time', array($ctime['wtime'],$ctime['ctime']))->whereIn('agent_identity', $uinfo['uid'])->get();
- $uwinfo = array();
- if($waterInfo && count($waterInfo->toArray())>0){
- foreach ($waterInfo->toArray() as $k => $v) {
- $uwinfo[$v['agent_identity']][$v['time_type']] = $v;
- }
- }
- //print_r($uwinfo);
- /*print_r($uinfo['uname']);
- print_r($uinfo['pid']);
- print_r($uinfo);exit;*/
- $indata = array();
- $udata = array();
- if (is_array($uinfo['pid']) && count($uinfo['pid']) > 0){
- foreach ($uinfo['pid'] as $pk => $pv) {
- //代理业绩统计
- $curmoney = $uinfo['buyinfo'][$pk];
- if(!isset($uwinfo[$pk][2])){
- $user = $uinfo['uname'][$pk];
- $type = 1;
- $indata = $this->getAddData($curmoney, $user, $ctime['ctime'], $pk, $type,$indata);
- if ($indata < 0)return $indata;
- $indata = $this->getAddData($curmoney, $user, $ctime['wtime'], $pk, $type,$indata);
- if ($indata < 0)return $indata;
- }else{
- //周统计更新数据处理
- $kwater = 'agent_water';
- $type = 1;
- //更新周统计
- $uwinfo[$pk][2] = $this->UpdateCountData($uwinfo[$pk][2], $kwater, $curmoney);
- if ($uwinfo[$pk][2] < 1)return $uwinfo[$pk][2];
- //日统计数据处理
- if (!isset($uwinfo[$pk][1])) {
- $indata = $this->getAddData($curmoney, $uwinfo[$pk][2]['agent_user'], $ctime['ctime'], $pk, $type,$indata);
- if ($indata < 0)return $indata;
- } else {
- //更新日统计
- $uwinfo[$pk][1] = $this->UpdateCountData($uwinfo[$pk][1], $kwater, $curmoney);
- if ($uwinfo[$pk][1] < 1)return $uwinfo[$pk][1];
- }
- }
- //代理父级业绩统计
- $allpi = count($pv);
- if($allpi>0){
- foreach ($pv as $k => $v) {
- //$pk:用户ID;$v:父级ID
- if(!isset($uwinfo[$v][2])){
- $user = $uinfo['uname'][$v];
- $type = (($k+1) == $allpi) ? 2 : 3;
-
- $indata = $this->getAddData($curmoney, $user, $ctime['ctime'], $v, $type,$indata);
- if ($indata < 0)return $indata;
- $indata = $this->getAddData($curmoney, $user, $ctime['wtime'], $v, $type,$indata);
- if ($indata < 0)return $indata;
- }else{
- //周统计更新数据处理
- $kwater = (($k+1) == $allpi) ? 'zt_water' : 'group_water';
- $type = (($k+1) == $allpi) ? 2 : 3;
- //更新周统计
- $uwinfo[$v][2] = $this->UpdateCountData($uwinfo[$v][2], $kwater, $curmoney);
- if ($uwinfo[$v][2] < 1)return $uwinfo[$v][2];
- //日统计数据处理
- if (!isset($uwinfo[$v][1])) {
- $indata = $this->getAddData($curmoney, $uwinfo[$v][2]['agent_user'], $ctime['ctime'], $v, $type,$indata);
- if ($indata < 0)return $indata;
- } else {
- //更新日统计
- $uwinfo[$v][1] = $this->UpdateCountData($uwinfo[$v][1], $kwater, $curmoney);
- if ($uwinfo[$v][1] < 1)return $uwinfo[$v][1];
- }
- }
- }
- }
-
- }
- }
-
- //更新或添加统计数据:添加数据二维关联或索引数据;更新数据三维数据
- $res = $nagentwater::udadData($indata,$uwinfo);
- return $res;
- }
- //代理父级信息获取,处理代理业绩数据为ID=>金额形式
- protected function getNpinfo($arr){
- //获取代理父级信息
- $agent = \App\Models\Nagent_detailed::select('parent_path','agent_identity')->whereIn('agent_identity', $arr['uid'])->get();
- if (!$agent || count($agent->toArray()) < 1) {
- return 0;
- }
- foreach ($agent->toArray() as $k => $v) {
- $parent = explode(',', $v['parent_path']);
- foreach ($parent as $pk => $pv) {
- if(empty($pv) || $pv=='f615dac7-afd9-a3ad-7b73-030454bd159c' || is_numeric($pv))continue;
- $arr['pid'][$v['agent_identity']][] = $pv;
- if(!in_array($pv, $arr['uid']))$arr['uid'][] = $pv;
- }
- }
- $allainfo = \App\Models\Account::select('account','identity')->whereIn('identity', $arr['uid'])->get();
- if (!$allainfo || count($allainfo->toArray()) < 1) {
- return 0;
- }
- foreach ($allainfo->toArray() as $k => $v) {
- $arr['uname'][$v['identity']] = $v['account'];
- }
- return $arr;
- }
- //周统计、日统计数据更新
- protected function UpdateCountData($water,$kwater,$money,$dsum=0,$game=''){
- $gwater = json_decode($water['game_water'],1);
- if(is_array($money)){
- $allmoney = 0;
- foreach ($money as $k => $v) {
- $gwater[$k][$kwater] = isset($gwater[$k][$kwater])?$gwater[$k][$kwater]+$v:$v;
- if($kwater != 'agent_water'){
- $gwater[$k]['sum_water'] = isset($gwater[$k]['sum_water'])?$gwater[$k]['sum_water']+$v:$v;
- $dsum += $v;
- }
- $allmoney += $v;
- }
- $money = $allmoney;
- }else{
- $gwater[$game][$kwater] = isset($gwater[$game][$kwater])?$gwater[$game][$kwater]+$money:$money;
- $gwater[$game]['sum_water'] = isset($gwater[$game]['sum_water'])?$gwater[$game]['sum_water']+$dsum:$dsum;
- }
- $water[$kwater] += $money;
- $water['update_time'] = date('Y-m-d H:i:s');
- $water['game_water'] = json_encode($gwater);
- $water['sum_water'] += $dsum;
- return $water;
- }
- //统计数据处理
- private function handleCountdata($type,$gwater,$money){
- if ($type == 1) {
- if(!empty($gwater)){
- $gwater['agent_water'] += $money;
- }else{
- $gwater = array(
- 'agent_water' => $money,
- 'zt_water' => 0,
- 'group_water' => 0,
- 'sum_water' => 0,
- );
- }
- } else {
- if(empty($gwater)){
- $gwater = array(
- 'agent_water' => 0,
- 'zt_water' => ($type == 2) ? $money : 0,
- 'group_water' => ($type == 2) ? 0 : $money,
- 'sum_water' => $money,
- );
- }else{
- $gwater['zt_water'] += ($type == 2) ? $money : 0;
- $gwater['group_water'] += ($type == 2) ? 0 : $money;
- $gwater['sum_water'] += $money;
- }
- }
- return $gwater;
- }
- //获取周统计、日统计记录数据
- protected function getAddData($money,$user,$counttime,$uid,$type,$indata,$game=''){
- if(empty($user)){
- $auser = \App\Models\Nagent_detailed::select('agent_user')->where('agent_identity',$uid)->first();
- if(!isset($auser->agent_user))return -200102;
- $user = $auser->agent_user;
- }
-
- $gwater = array();
- $gswater = array();
- $uck = $uid.$counttime;
- if(isset($indata[$uck])){
- $gwater = array(
- 'agent_water' => $indata[$uck]['agent_water'],
- 'zt_water' => $indata[$uck]['zt_water'],
- 'group_water' => $indata[$uck]['group_water'],
- 'sum_water' => $indata[$uck]['sum_water'],
- );
- $gswater = json_decode($indata[$uck]['game_water'],1);
- }
- if(is_array($money)){
- $allmoney = 0;
- foreach ($money as $k => $v) {
- $allmoney += $v;
- $gswater[$k] = isset($gswater[$k])?$gswater[$k]:array();
- $gswater[$k] = $this->handleCountdata($type,$gswater[$k],$v);
- }
- $money = $allmoney;
- }
- $gwater = $this->handleCountdata($type,$gwater,$money);
-
- if(isset($indata[$uck])){
- $indata[$uck]['agent_water'] = $gwater['agent_water'];
- $indata[$uck]['zt_water'] = $gwater['zt_water'];
- $indata[$uck]['group_water'] = $gwater['group_water'];
- $indata[$uck]['sum_water'] = $gwater['sum_water'];
- $indata[$uck]['update_time'] = date('Y-m-d H:i:s');
- if(empty($game)){
- $indata[$uck]['game_water'] = json_encode($gswater);
- }else{
- $indata[$uck]['game_water'] = json_encode(array($game => $gwater));
- }
- }else{
- $indata[$uck] = $gwater;
- $indata[$uck]['agent_user'] = $user;
- $indata[$uck]['agent_identity'] = $uid;
- $indata[$uck]['count_time'] = $counttime;
- $indata[$uck]['time_type'] = count(explode('-', $counttime))==2?2:1;
- $indata[$uck]['update_time'] = date('Y-m-d H:i:s');
- if(empty($game)){
- $indata[$uck]['game_water'] = json_encode($gswater);
- }else{
- $indata[$uck]['game_water'] = json_encode(array($game => $gwater));
- }
- }
-
- return $indata;
- }
- //添加或更新统计游戏信息
- protected function addOrUpdate($record,$data){
- if(!empty($record) && isset($record['id'])){
- $res = $this->where('id',$record['id'])->update($data);
- }else{
- $res = $this->insert($data);
- }
- if($res<1)return -8505013102;
- return 1;
- }
- //格式化时间为日期和年周
- protected function getFormatTime($ctime){
- $time['ctime'] = date('Y-m-d',strtotime($ctime));
- $y = date('Y',strtotime($ctime));
- $m = date('m',strtotime($ctime));
- $w = date('W',strtotime($ctime));
- if($m==12 && $w==1)$y+=1;
- $time['wtime'] = $y . '-' . $w;
- return $time;
- }
- }
|