| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278 |
- <?php
- namespace App\Http\Controllers\Admins;
- use App\Modes\AdminArea;
- use App\Modes\Stat;
- use App\Modes\User;
- use App\Modes\Proxy;
- use App\Modes\Order;
- use Carbon\Carbon;
- use Illuminate\Http\Request;
- use App\Http\Controllers\Controller;
- class StatController extends Controller
- {
- /**
- * 月任务量完成情况统计 此处数据不对不统计了
- * @author lyh
- * @date 2019/4/8
- * @modify_author lyh
- * @modify_time 2019-4-26 11:32:49
- * @modify 确认已区分系统管理员与地区管理员权限
- * @param Request $request
- * @return \Illuminate\Contracts\Routing\ResponseFactory|\Symfony\Component\HttpFoundation\Response
- * @description
- */
- public function goalInMonthlyh(Request $request)
- {
- $validate = \Validator::make($param = $request->all(), [
- 'year' => 'required|integer|min:2019|max:2099',
- 'month' => 'integer|min:1|max:12'
- ]);
- if ($validate->fails()) {
- return showJsonErr($validate->errors()->first());
- }
- $res = [];
- if (empty($param['month'])) {
- for ($i = 1; $i < 12; $i++) {
- $stat = Stat::where('date', $param['year'] . $i)->whereType(2)->with(['User' => function ($query) {
- $query->select(['id', 'nick_name', 'mobile']);
- }]);
- // 城市代理管理员只能查看该地区代理的用户
- if (\Auth::user()->is_super == 3) {
- $stat = $stat->whereIn('uid', getIds());
- }
- $stat = $stat->first();
- if ($stat) {
- $res[] = $stat;
- }
- }
- } else {
- $startmonth=$param['year'].'-'.$param['month'].'-01';
- $endmonth=date('Y-m-d H:i:s', strtotime(date('Y-m-01', strtotime($startmonth)) . ' +1 month'));
- $stat = Stat::whereBetween('date',[$startmonth , $endmonth])->whereType(2)->with(['User' => function ($query) {
- $query->select(['id', 'nick_name', 'mobile']);
- }]);
- // 区分系统管理员与地区管理员数据
- if (\Auth::user()->is_super == 3) {
- $stat = $stat->whereIn('uid', getIds());
- }
- $res = $stat->get();
- }
- return showJsonSucc(1001, $res);
- }
- /*
- * 月任务量完成情况统计 wsl 20190702
- *仅展示已完成目标的代理
- * */
- public function goalInMonth(Request $request){
- $validate = \Validator::make($param = $request->all(), [
- 'year' => 'required|integer|min:2019|max:2099',
- 'month' => 'integer|min:1|max:12'
- ]);
- if ($validate->fails()) {
- return showJsonErr($validate->errors()->first());
- }
- // 区分系统管理员与地区管理员数据
- if (\Auth::user()->is_super == 3) {
- $users = User::whereIn('id', getIds())->select('level','province','city','district','id','mobile','nick_name')->get();
- }else{
- $user=User::select('level','province','city','district','id','mobile','nick_name');
- //管理员查看对应的代理
- $district=AdminArea::getAdminArea();
- if(!empty($district)){
- if(!empty($district['city'])){
- $user->whereCity($district['city']);
- }else{
- $user->whereDistrict($district['district']);
- }
- }
- $users=$user->get();
- }
- $res=[];
- //计算任务量
- $total=0;//总完成任务量
- $kk=0;
- foreach($users as $key=>$item){
- $childarr=User::where('invitor','=',$item->id)->get(['id']);
- $childarr=$childarr->toArray();
- $arr=[];
- if(!empty($childarr)){
- foreach ($childarr as $ke=>$ve){
- $arr[]=$ve['id'];
- }
- }
- $montstat=$this->getMonthOrYearStat($item->id,$arr,$param['year'],$param['month']);//已完成的月任务量
- if(($item->level+1)<=7){
- $setting=Proxy::getSettingByAreaAndLevel($item->level+1,$item->province,$item->city,$item->district);
- //目标任务量
- if(!empty($setting)&&$montstat>=$setting['upgrade_business_month'] && $setting['upgrade_business_month']!='0.000'){
- $res[$kk]['id']=$kk+1;
- $res[$kk]['province']=$item->province;
- $res[$kk]['city']=$item->city;
- $res[$kk]['district']=$item->district;
- $res[$kk]['current']=round($montstat,3);
- $res[$kk]['goal']=$setting['upgrade_business_month'];
- $res[$kk]['date']=$param['year'].$param['month'];
- $res[$kk]['user']=['id'=>$item->id,'nick_name'=>$item->nick_name,'mobile'=>$item->mobile];
- $kk++;
- }
- }
- $total+=$montstat;
- }
- if(!empty($res)){
- foreach($res as $k=>$v){
- //$res[$k]['percent']=round($v['current']/$total,2)*100;
- $res[$k]['percent']=sprintf("%.4f",$v['current']/$total)*100;
- }
- }
- return showJsonSucc(1001, $res);
- }
- /*
- * 计算当月或者当年的业绩
- * addby wsl 20190626
- *
- * */
- public static function getMonthOrYearStat($uid,$childarr,$year=0,$month=0){
- if(!empty($month)){
- //yue
- $startime=$year.'-'.$month.'-01';
- $endmonth=date('Y-m-d H:i:s', strtotime(date('Y-m-01', strtotime($startime)) . ' +1 month'));
- }else{
- //nian
- $startime=$year.'-'.'01-01 00:00:00';
- $endmonth=($year+1).'-'.'01-01 00:00:00';
- }
- if(!empty($childarr)){
- $sumprice=Order::where(function ($query) use ($childarr,$uid){
- $query->where('uid','=',$uid)
- ->orWhere(function ($query) use ($childarr){
- $query->whereIn('uid',$childarr)
- ->where('type','=',2);
- });
- })->where('is_pay','=',1)
- ->whereBetween('created_at',[$startime,$endmonth])
- ->sum('price');
- }else{
- $sumprice=Order::where('uid','=',$uid)
- ->where('is_pay','=',1)
- ->whereBetween('created_at',[$startime,$endmonth])
- ->sum('price');
- }
- return $sumprice;
- }
- /**
- * 年任务量完成情况统计 数据错误此处不用了
- * @author lyh
- * @date 2019/4/8
- * @modify_author lyh
- * @modify_time 2019-4-26 11:26:31
- * @modify 确认已区分系统管理员与地区管理员权限
- * @description
- */
- public function goalInYearlyh(Request $request)
- {
- $validate = \Validator::make($param = $request->all(), [
- 'year' => 'required|integer|min:2019|max:2099',
- ]);
- if ($validate->fails()) {
- return showJsonErr($validate->errors()->first());
- }
- $stat = Stat::where('date', $param['year'])->whereType(1)->with(['User' => function ($query) {
- $query->select(['id', 'nick_name', 'mobile']);
- }]);
- // 区分系统管理员与地区管理员数据
- if (\Auth::user()->is_super == 3) {
- $stat = $stat->whereIn('uid', getIds());
- }
- $res = $stat->get();
- return showJsonSucc(1001, $res);
- }
- public function goalInYear(Request $request){
- $validate = \Validator::make($param = $request->all(), [
- 'year' => 'required|integer|min:2019|max:2099',
- //'month' => 'integer|min:1|max:12'
- ]);
- if ($validate->fails()) {
- return showJsonErr($validate->errors()->first());
- }
- // 区分系统管理员与地区管理员数据
- if (\Auth::user()->is_super == 3) {
- $users = User::whereIn('id', getIds())->select('level','province','city','district','id','mobile','nick_name')->get();
- }else {
- $user=User::select('level','province','city','district','id','mobile','nick_name');
- //管理员查看对应的代理
- $district=AdminArea::getAdminArea();
- if(!empty($district)){
- if(!empty($district['city'])){
- $user->whereCity($district['city']);
- }else{
- $user->whereDistrict($district['district']);
- }
- }
- $users=$user->get()->toArray();
-
- }
- $res=[];
- //计算任务量
- $total=0;//总完成任务量
- $kk=0;
- foreach($users as $key=>$item){
- $childarr=User::where('invitor','=',$item->id)->get(['id']);
- $childarr=$childarr->toArray();
- $arr=[];
- if(!empty($childarr)){
- foreach ($childarr as $ke=>$ve){
- $arr[]=$ve['id'];
- }
- }
- $montstat=$this->getMonthOrYearStat($item['id'],$arr,$param['year']);//已完成的年任务量
- if(($item['level']+1)<=7) {
- $setting = Proxy::getSettingByAreaAndLevel($item['level'] + 1, $item['province'], $item['city'], $item['district']);
- //目标任务量
- if (!empty($setting) && $montstat >= $setting['upgrade_business_month'] && $setting['upgrade_business_month'] != '0.000') {
- $res[$kk]['id'] = $kk + 1;
- $res[$kk]['province'] = $item['province'];
- $res[$kk]['city'] = $item['city'];
- $res[$kk]['district'] = $item['district'];
- $res[$kk]['current'] = round($montstat, 3);
- $res[$kk]['goal'] = $setting['upgrade_business_month'];
- $res[$kk]['date'] = $param['year'];
- $res[$kk]['user'] = ['id' => $item['id'], 'nick_name' => $item['nick_name'], 'mobile' => $item['mobile']];
- $kk++;
- }
- }
- $total+=$montstat;
- }
- if(!empty($res)){
- foreach($res as $k=>$v){
- //round($v['current']/$total,3)*100;
- $res[$k]['percent']=sprintf("%.4f",$v['current']/$total)*100;
- $res[$k]['total']=$total;
- }
- }
- return showJsonSucc(1001, $res);
- }
- }
|