StatController.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. <?php
  2. namespace App\Http\Controllers\Admins;
  3. use App\Modes\AdminArea;
  4. use App\Modes\Stat;
  5. use App\Modes\User;
  6. use App\Modes\Proxy;
  7. use App\Modes\Order;
  8. use Carbon\Carbon;
  9. use Illuminate\Http\Request;
  10. use App\Http\Controllers\Controller;
  11. class StatController extends Controller
  12. {
  13. /**
  14. * 月任务量完成情况统计 此处数据不对不统计了
  15. * @author lyh
  16. * @date 2019/4/8
  17. * @modify_author lyh
  18. * @modify_time 2019-4-26 11:32:49
  19. * @modify 确认已区分系统管理员与地区管理员权限
  20. * @param Request $request
  21. * @return \Illuminate\Contracts\Routing\ResponseFactory|\Symfony\Component\HttpFoundation\Response
  22. * @description
  23. */
  24. public function goalInMonthlyh(Request $request)
  25. {
  26. $validate = \Validator::make($param = $request->all(), [
  27. 'year' => 'required|integer|min:2019|max:2099',
  28. 'month' => 'integer|min:1|max:12'
  29. ]);
  30. if ($validate->fails()) {
  31. return showJsonErr($validate->errors()->first());
  32. }
  33. $res = [];
  34. if (empty($param['month'])) {
  35. for ($i = 1; $i < 12; $i++) {
  36. $stat = Stat::where('date', $param['year'] . $i)->whereType(2)->with(['User' => function ($query) {
  37. $query->select(['id', 'nick_name', 'mobile']);
  38. }]);
  39. // 城市代理管理员只能查看该地区代理的用户
  40. if (\Auth::user()->is_super == 3) {
  41. $stat = $stat->whereIn('uid', getIds());
  42. }
  43. $stat = $stat->first();
  44. if ($stat) {
  45. $res[] = $stat;
  46. }
  47. }
  48. } else {
  49. $startmonth=$param['year'].'-'.$param['month'].'-01';
  50. $endmonth=date('Y-m-d H:i:s', strtotime(date('Y-m-01', strtotime($startmonth)) . ' +1 month'));
  51. $stat = Stat::whereBetween('date',[$startmonth , $endmonth])->whereType(2)->with(['User' => function ($query) {
  52. $query->select(['id', 'nick_name', 'mobile']);
  53. }]);
  54. // 区分系统管理员与地区管理员数据
  55. if (\Auth::user()->is_super == 3) {
  56. $stat = $stat->whereIn('uid', getIds());
  57. }
  58. $res = $stat->get();
  59. }
  60. return showJsonSucc(1001, $res);
  61. }
  62. /*
  63. * 月任务量完成情况统计 wsl 20190702
  64. *仅展示已完成目标的代理
  65. * */
  66. public function goalInMonth(Request $request){
  67. $validate = \Validator::make($param = $request->all(), [
  68. 'year' => 'required|integer|min:2019|max:2099',
  69. 'month' => 'integer|min:1|max:12'
  70. ]);
  71. if ($validate->fails()) {
  72. return showJsonErr($validate->errors()->first());
  73. }
  74. // 区分系统管理员与地区管理员数据
  75. if (\Auth::user()->is_super == 3) {
  76. $users = User::whereIn('id', getIds())->select('level','province','city','district','id','mobile','nick_name')->get();
  77. }else{
  78. $user=User::select('level','province','city','district','id','mobile','nick_name');
  79. //管理员查看对应的代理
  80. $district=AdminArea::getAdminArea();
  81. if(!empty($district)){
  82. if(!empty($district['city'])){
  83. $user->whereCity($district['city']);
  84. }else{
  85. $user->whereDistrict($district['district']);
  86. }
  87. }
  88. $users=$user->get();
  89. }
  90. $res=[];
  91. //计算任务量
  92. $total=0;//总完成任务量
  93. $kk=0;
  94. foreach($users as $key=>$item){
  95. $childarr=User::where('invitor','=',$item->id)->get(['id']);
  96. $childarr=$childarr->toArray();
  97. $arr=[];
  98. if(!empty($childarr)){
  99. foreach ($childarr as $ke=>$ve){
  100. $arr[]=$ve['id'];
  101. }
  102. }
  103. $montstat=$this->getMonthOrYearStat($item->id,$arr,$param['year'],$param['month']);//已完成的月任务量
  104. if(($item->level+1)<=7){
  105. $setting=Proxy::getSettingByAreaAndLevel($item->level+1,$item->province,$item->city,$item->district);
  106. //目标任务量
  107. if(!empty($setting)&&$montstat>=$setting['upgrade_business_month'] && $setting['upgrade_business_month']!='0.000'){
  108. $res[$kk]['id']=$kk+1;
  109. $res[$kk]['province']=$item->province;
  110. $res[$kk]['city']=$item->city;
  111. $res[$kk]['district']=$item->district;
  112. $res[$kk]['current']=round($montstat,3);
  113. $res[$kk]['goal']=$setting['upgrade_business_month'];
  114. $res[$kk]['date']=$param['year'].$param['month'];
  115. $res[$kk]['user']=['id'=>$item->id,'nick_name'=>$item->nick_name,'mobile'=>$item->mobile];
  116. $kk++;
  117. }
  118. }
  119. $total+=$montstat;
  120. }
  121. if(!empty($res)){
  122. foreach($res as $k=>$v){
  123. //$res[$k]['percent']=round($v['current']/$total,2)*100;
  124. $res[$k]['percent']=sprintf("%.4f",$v['current']/$total)*100;
  125. }
  126. }
  127. return showJsonSucc(1001, $res);
  128. }
  129. /*
  130. * 计算当月或者当年的业绩
  131. * addby wsl 20190626
  132. *
  133. * */
  134. public static function getMonthOrYearStat($uid,$childarr,$year=0,$month=0){
  135. if(!empty($month)){
  136. //yue
  137. $startime=$year.'-'.$month.'-01';
  138. $endmonth=date('Y-m-d H:i:s', strtotime(date('Y-m-01', strtotime($startime)) . ' +1 month'));
  139. }else{
  140. //nian
  141. $startime=$year.'-'.'01-01 00:00:00';
  142. $endmonth=($year+1).'-'.'01-01 00:00:00';
  143. }
  144. if(!empty($childarr)){
  145. $sumprice=Order::where(function ($query) use ($childarr,$uid){
  146. $query->where('uid','=',$uid)
  147. ->orWhere(function ($query) use ($childarr){
  148. $query->whereIn('uid',$childarr)
  149. ->where('type','=',2);
  150. });
  151. })->where('is_pay','=',1)
  152. ->whereBetween('created_at',[$startime,$endmonth])
  153. ->sum('price');
  154. }else{
  155. $sumprice=Order::where('uid','=',$uid)
  156. ->where('is_pay','=',1)
  157. ->whereBetween('created_at',[$startime,$endmonth])
  158. ->sum('price');
  159. }
  160. return $sumprice;
  161. }
  162. /**
  163. * 年任务量完成情况统计 数据错误此处不用了
  164. * @author lyh
  165. * @date 2019/4/8
  166. * @modify_author lyh
  167. * @modify_time 2019-4-26 11:26:31
  168. * @modify 确认已区分系统管理员与地区管理员权限
  169. * @description
  170. */
  171. public function goalInYearlyh(Request $request)
  172. {
  173. $validate = \Validator::make($param = $request->all(), [
  174. 'year' => 'required|integer|min:2019|max:2099',
  175. ]);
  176. if ($validate->fails()) {
  177. return showJsonErr($validate->errors()->first());
  178. }
  179. $stat = Stat::where('date', $param['year'])->whereType(1)->with(['User' => function ($query) {
  180. $query->select(['id', 'nick_name', 'mobile']);
  181. }]);
  182. // 区分系统管理员与地区管理员数据
  183. if (\Auth::user()->is_super == 3) {
  184. $stat = $stat->whereIn('uid', getIds());
  185. }
  186. $res = $stat->get();
  187. return showJsonSucc(1001, $res);
  188. }
  189. public function goalInYear(Request $request){
  190. $validate = \Validator::make($param = $request->all(), [
  191. 'year' => 'required|integer|min:2019|max:2099',
  192. //'month' => 'integer|min:1|max:12'
  193. ]);
  194. if ($validate->fails()) {
  195. return showJsonErr($validate->errors()->first());
  196. }
  197. // 区分系统管理员与地区管理员数据
  198. if (\Auth::user()->is_super == 3) {
  199. $users = User::whereIn('id', getIds())->select('level','province','city','district','id','mobile','nick_name')->get();
  200. }else {
  201. $user=User::select('level','province','city','district','id','mobile','nick_name');
  202. //管理员查看对应的代理
  203. $district=AdminArea::getAdminArea();
  204. if(!empty($district)){
  205. if(!empty($district['city'])){
  206. $user->whereCity($district['city']);
  207. }else{
  208. $user->whereDistrict($district['district']);
  209. }
  210. }
  211. $users=$user->get()->toArray();
  212. }
  213. $res=[];
  214. //计算任务量
  215. $total=0;//总完成任务量
  216. $kk=0;
  217. foreach($users as $key=>$item){
  218. $childarr=User::where('invitor','=',$item->id)->get(['id']);
  219. $childarr=$childarr->toArray();
  220. $arr=[];
  221. if(!empty($childarr)){
  222. foreach ($childarr as $ke=>$ve){
  223. $arr[]=$ve['id'];
  224. }
  225. }
  226. $montstat=$this->getMonthOrYearStat($item['id'],$arr,$param['year']);//已完成的年任务量
  227. if(($item['level']+1)<=7) {
  228. $setting = Proxy::getSettingByAreaAndLevel($item['level'] + 1, $item['province'], $item['city'], $item['district']);
  229. //目标任务量
  230. if (!empty($setting) && $montstat >= $setting['upgrade_business_month'] && $setting['upgrade_business_month'] != '0.000') {
  231. $res[$kk]['id'] = $kk + 1;
  232. $res[$kk]['province'] = $item['province'];
  233. $res[$kk]['city'] = $item['city'];
  234. $res[$kk]['district'] = $item['district'];
  235. $res[$kk]['current'] = round($montstat, 3);
  236. $res[$kk]['goal'] = $setting['upgrade_business_month'];
  237. $res[$kk]['date'] = $param['year'];
  238. $res[$kk]['user'] = ['id' => $item['id'], 'nick_name' => $item['nick_name'], 'mobile' => $item['mobile']];
  239. $kk++;
  240. }
  241. }
  242. $total+=$montstat;
  243. }
  244. if(!empty($res)){
  245. foreach($res as $k=>$v){
  246. //round($v['current']/$total,3)*100;
  247. $res[$k]['percent']=sprintf("%.4f",$v['current']/$total)*100;
  248. $res[$k]['total']=$total;
  249. }
  250. }
  251. return showJsonSucc(1001, $res);
  252. }
  253. }