156 lines
6.2 KiB
PHP
156 lines
6.2 KiB
PHP
<?php
|
|
namespace app\admin\targets\controller;
|
|
|
|
use app\admin\targets\service\SalesAnnualTargetsService;
|
|
use app\common\controller\BaseController;
|
|
use app\common\model\Corp;
|
|
use app\common\model\SalesAnnualTargets;
|
|
use app\common\model\SalesMonthlyTargets;
|
|
use app\common\model\User;
|
|
use app\common\traits\crud\CrudControllerTrait;
|
|
use support\Request;
|
|
use support\Db;
|
|
|
|
class StatisticsController extends BaseController
|
|
{
|
|
use CrudControllerTrait;
|
|
|
|
protected $service;
|
|
|
|
public function __construct()
|
|
{
|
|
$this->service = new SalesAnnualTargetsService();
|
|
}
|
|
|
|
public function total(Request $request)
|
|
{
|
|
$param = $request->all();
|
|
if (empty($param['year'])) {
|
|
return $this->error('year不能为空');
|
|
}
|
|
|
|
$data = SalesAnnualTargets::select('annual_target','corp_id')
|
|
->whereNull('user_id')
|
|
->where('year',$param['year'])
|
|
->orderBy('corp_id')
|
|
->get()
|
|
->toArray();
|
|
|
|
foreach ($data as &$value) {
|
|
$where = [];
|
|
$where[] = ['year', '=', $param['year']];
|
|
if (!empty($value['corp_id'])) {
|
|
$where[] = ['corp_id', '=', $value['corp_id']];
|
|
}
|
|
$value['achieved'] = SalesMonthlyTargets::where($where)->sum('achieved');
|
|
$value['progress'] = empty($value['annual_target'])?'100%':number_format(($value['achieved']/$value['annual_target']*100),2) . '%';
|
|
$value['corp_name'] = empty($value['corp_id'])?'集团':Corp::where(['id' => $value['corp_id']])->value('name');
|
|
}
|
|
return $this->success($data);
|
|
}
|
|
|
|
public function ranking(Request $request){
|
|
$param = $request->all();
|
|
$year = empty($param['year']) ? date('Y') : $param['year'];
|
|
$where = [];
|
|
$where[] = ['year', '=', $year];
|
|
$ranking = SalesMonthlyTargets::select('corp_id', 'user_id', Db::raw('SUM(achieved) AS achieved'))
|
|
->where($where)
|
|
->groupBy('corp_id', 'user_id')
|
|
->orderBy('achieved', 'desc')
|
|
->get();
|
|
foreach ($ranking as $key => $value) {
|
|
$ranking[$key]['corp_name'] = Corp::where(['id' => $value['corp_id']])->value('name');
|
|
$ranking[$key]['user_name'] = User::where(['id' => $value['user_id']])->value('name');
|
|
}
|
|
return $this->success($ranking);
|
|
}
|
|
|
|
public function achievedUserByMonth(Request $request){
|
|
$param = $request->all();
|
|
$year = empty($param['year']) ? date('Y') : $param['year'];
|
|
$where = [];
|
|
$where[] = ['year', '=', $year];
|
|
$ranking = SalesMonthlyTargets::select('corp_id', 'user_id', 'month', Db::raw('SUM(achieved) AS achieved'))
|
|
->where($where)
|
|
->groupBy('corp_id', 'user_id', 'month')
|
|
->orderBy('user_id', 'asc')
|
|
->orderBy('month', 'asc')
|
|
->get();
|
|
$result = [];
|
|
foreach ($ranking as $key => $value) {
|
|
$result[$value['user_id']]['month'][$value['month']] = $value['achieved'];
|
|
$result[$value['user_id']]['user_id'] = $value['user_id'];
|
|
$result[$value['user_id']]['corp_id'] = $value['corp_id'];
|
|
}
|
|
foreach ($result as $key => $value) {
|
|
for($i = 1; $i <= 12; $i++){
|
|
$result[$key]['month'][$i] = $result[$key]['month'][$i]??0;
|
|
}
|
|
$result[$key]['month'] = array_values($result[$key]['month']);
|
|
$result[$key]['corp_name'] = Corp::where(['id' => $value['corp_id']])->value('name');
|
|
$result[$key]['user_name'] = User::where(['id' => $value['user_id']])->value('name');
|
|
}
|
|
$result = array_values($result);
|
|
return $this->success($result);
|
|
}
|
|
|
|
/**
|
|
* 个人年度目标完成度(百分比)
|
|
* @param Request $request
|
|
* @return \support\Response
|
|
*/
|
|
public function userProgressh(Request $request){
|
|
$param = $request->all();
|
|
$year = empty($param['year']) ? date('Y') : $param['year'];
|
|
$where = [];
|
|
$where[] = ['year', '=', $year];
|
|
$achieved = SalesMonthlyTargets::select('corp_id', 'user_id', Db::raw('SUM(achieved) AS achieved'))
|
|
->where($where)
|
|
->groupBy('corp_id', 'user_id')
|
|
->orderBy('achieved', 'desc')
|
|
->get()
|
|
->toArray();
|
|
$sort = [];
|
|
foreach ($achieved as $key => $value) {
|
|
$achieved[$key]['corp_name'] = Corp::where(['id' => $value['corp_id']])->value('name');
|
|
$achieved[$key]['user_name'] = User::where(['id' => $value['user_id']])->value('name');
|
|
$target = SalesAnnualTargets::where(['user_id' => $value['user_id']])->value('annual_target');
|
|
$achieved[$key]['progressh'] = empty($target) ? 0 : round(($value['achieved'] / $target) * 100, 2);
|
|
$sort[] = $achieved[$key]['progressh'];
|
|
}
|
|
array_multisort($sort, SORT_DESC, SORT_NUMERIC, $achieved);
|
|
|
|
foreach ($achieved as $key => $value) {
|
|
$achieved[$key]['progressh'] = $value['progressh'];
|
|
}
|
|
return $this->success($achieved);
|
|
}
|
|
|
|
/**
|
|
* 个人累积完成数量(辆)
|
|
* @param Request $request
|
|
* @return \support\Response
|
|
*/
|
|
public function userAchieved(Request $request){
|
|
$param = $request->all();
|
|
$year = empty($param['year']) ? date('Y') : $param['year'];
|
|
$where = [];
|
|
$where[] = ['year', '=', $year];
|
|
$achieved = SalesMonthlyTargets::select('corp_id', 'user_id', Db::raw('SUM(achieved) AS achieved'))
|
|
->where($where)
|
|
->groupBy('corp_id', 'user_id')
|
|
->orderBy('achieved', 'desc')
|
|
->get()
|
|
->toArray();
|
|
foreach ($achieved as $key => $value) {
|
|
$achieved[$key]['corp_name'] = Corp::where(['id' => $value['corp_id']])->value('name');
|
|
$achieved[$key]['user_name'] = User::where(['id' => $value['user_id']])->value('name');
|
|
$target = SalesAnnualTargets::where(['user_id' => $value['user_id']])->value('annual_target');
|
|
$achieved[$key]['annual_target'] = empty($target) ? 0 : $target;
|
|
$achieved[$key]['total'] = [intval($value['achieved']), $achieved[$key]['annual_target']];
|
|
}
|
|
return $this->success($achieved);
|
|
}
|
|
|
|
} |