generated from panliang/owl-admin-starter
党支部平均分排名
parent
6938324dd6
commit
9b01f3e362
|
|
@ -36,16 +36,14 @@ class CateRank extends Command
|
|||
$sn = $time->year . '-' . $time->quarter;
|
||||
$list = [];
|
||||
CateRankModel::where('sn', $sn)->delete();
|
||||
$scoreList = UserScore::query()
|
||||
->whereBetween('created_at', [$start, $end])
|
||||
->select('cate_id', DB::raw('sum(`score`) as `score`'))
|
||||
->groupBy('cate_id')
|
||||
->get();
|
||||
foreach ($scoreList as $item) {
|
||||
$cateList = PartyCate::withCount(['users'])->get();
|
||||
foreach ($cateList as $item) {
|
||||
$list[] = [
|
||||
'sn' => $sn,
|
||||
'cate_id' => $item->cate_id,
|
||||
'score' => $item->score,
|
||||
'cate_id' => $item->id,
|
||||
'score' => $item->current_score,
|
||||
'count' => $item->users_count,
|
||||
'avg_score' => floor($item->score/$item->users_count),
|
||||
'created_at' => $now,
|
||||
'updated_at' => $now,
|
||||
];
|
||||
|
|
|
|||
|
|
@ -0,0 +1,90 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\{PartyCate, CateRank};
|
||||
|
||||
class CateRankController extends Controller
|
||||
{
|
||||
// 支部排名
|
||||
public function index(Request $request)
|
||||
{
|
||||
$query = PartyCate::withCount(['users']);
|
||||
if ($request->filled('limit')) {
|
||||
$query->limit($request->input('limit'));
|
||||
}
|
||||
|
||||
$user = auth('api')->user();
|
||||
// 当前用户所在的支部排名
|
||||
$current = ['score' => '-', 'rank' => '-', 'cate' => ''];
|
||||
|
||||
$list = $query->get();
|
||||
$rankList = collect();
|
||||
foreach ($list as $item) {
|
||||
$rankList->push([
|
||||
'id' => $item->id,
|
||||
'name' => $item->name,
|
||||
'count' => $item->users_count,
|
||||
'score' => floor($item->current_score / $item->users_count),
|
||||
]);
|
||||
}
|
||||
$rankList = $rankList->sortByDesc('score');
|
||||
$rankList = $rankList->values()->map(function ($item, $index) use ($user, &$current) {
|
||||
$item['rank'] = $index + 1;
|
||||
if ($user && $item['id'] == $user->cate_id) {
|
||||
$current['cate'] = $item['name'];
|
||||
$current['rank'] = $item['rank'];
|
||||
$current['score'] = $item['score'];
|
||||
}
|
||||
return $item;
|
||||
});
|
||||
|
||||
return $this->response()->success(['list' => $rankList, 'current' => $current]);
|
||||
}
|
||||
|
||||
// 党支部排名期数
|
||||
public function dates()
|
||||
{
|
||||
$query = CateRank::query();
|
||||
$list = $query->select('sn')->groupBy('sn')->pluck('sn');
|
||||
|
||||
return $this->response()->success($list);
|
||||
}
|
||||
|
||||
// 党支部其他季度的排名记录
|
||||
public function list(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
// 期数
|
||||
'sn' => 'required',
|
||||
]);
|
||||
$type = $request->input('column', 'avg_score');
|
||||
$list = CateRank::with(['cate'])
|
||||
->where('sn', $request->input('sn'))
|
||||
->orderBy($type, 'desc')
|
||||
->get();
|
||||
$rankList = [];
|
||||
$user = auth('api')->user();
|
||||
// 当前用户所在的支部排名
|
||||
$current = ['score' => '-', 'rank' => '-', 'cate' => ''];
|
||||
foreach ($list as $index => $item) {
|
||||
$rankItem = [
|
||||
'id' => $item->id,
|
||||
'name' => $item->cate?->name,
|
||||
'rank' => $index + 1,
|
||||
'score' => $item->$type,
|
||||
];
|
||||
$rankList[] = $rankItem;
|
||||
|
||||
if ($user && $rankItem['id'] == $user->cate_id) {
|
||||
$current['cate'] = $rankItem['name'];
|
||||
$current['rank'] = $rankItem['rank'];
|
||||
$current['score'] = $rankItem['score'];
|
||||
}
|
||||
}
|
||||
|
||||
return $this->response()->success(['list' => $rankList, 'current' => $current]);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,84 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\{PartyUser, UserRank};
|
||||
|
||||
class UserRankController extends Controller
|
||||
{
|
||||
// 党员排名
|
||||
public function index(Request $request)
|
||||
{
|
||||
$query = PartyUser::query();
|
||||
if ($request->filled('limit')) {
|
||||
$query->limit($request->input('limit'));
|
||||
}
|
||||
|
||||
$user = auth('api')->user();
|
||||
// 当前用户的排名
|
||||
$current = ['score' => '-', 'rank' => '-'];
|
||||
|
||||
$list = $query->orderBy('current_score', 'desc')->get();
|
||||
$rankList = [];
|
||||
foreach($list as $index => $item) {
|
||||
$rankItem = [
|
||||
'id' => $item->id,
|
||||
'name' => $item->name,
|
||||
'rank' => $index + 1,
|
||||
'score' => $item->current_score
|
||||
];
|
||||
$rankList[] = $rankItem;
|
||||
if ($user && $rankItem['id'] == $user->id) {
|
||||
$current['rank'] = $rankItem['rank'];
|
||||
$current['score'] = $rankItem['score'];
|
||||
}
|
||||
}
|
||||
|
||||
return $this->response()->success(['list' => $rankList, 'current' => $current]);
|
||||
}
|
||||
|
||||
// 党员排名期数
|
||||
public function dates()
|
||||
{
|
||||
$query = UserRank::query();
|
||||
$list = $query->select('sn')->groupBy('sn')->pluck('sn');
|
||||
|
||||
return $this->response()->success($list);
|
||||
}
|
||||
|
||||
// 党员其他季度的排名记录
|
||||
public function list(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
// 期数
|
||||
'sn' => 'required',
|
||||
]);
|
||||
$list = UserRank::with(['user'])
|
||||
->where('sn', $request->input('sn'))
|
||||
->orderBy('score', 'desc')
|
||||
->get();
|
||||
$rankList = [];
|
||||
$user = auth('api')->user();
|
||||
// 当前用户所在的支部排名
|
||||
$current = ['score' => '-', 'rank' => '-', 'cate' => ''];
|
||||
foreach ($list as $index => $item) {
|
||||
$rankItem = [
|
||||
'id' => $item->id,
|
||||
'name' => $item->user?->name,
|
||||
'rank' => $index + 1,
|
||||
'score' => $item->score,
|
||||
];
|
||||
$rankList[] = $rankItem;
|
||||
|
||||
if ($user && $rankItem['id'] == $user->cate_id) {
|
||||
$current['cate'] = $rankItem['name'];
|
||||
$current['rank'] = $rankItem['rank'];
|
||||
$current['score'] = $rankItem['score'];
|
||||
}
|
||||
}
|
||||
|
||||
return $this->response()->success(['list' => $rankList, 'current' => $current]);
|
||||
}
|
||||
}
|
||||
|
|
@ -14,7 +14,7 @@ class CateRank extends Model
|
|||
use HasDateTimeFormatter, Filterable;
|
||||
|
||||
protected $table = 'cate_rank';
|
||||
protected $fillable = ['sn', 'cate_id', 'score'];
|
||||
protected $fillable = ['sn', 'cate_id', 'score', 'count'];
|
||||
|
||||
public function cate()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ return new class extends Migration
|
|||
$table->string('sn')->comment('期数(第一期: 202301)');
|
||||
$table->unsignedBigInteger('cate_id')->comment('支部(party_cates.id)');
|
||||
$table->unsignedBigInteger('user_id')->comment('党员(party_users.id)');
|
||||
$table->unsignedInteger('score')->default(0)->comment('得分');
|
||||
$table->unsignedInteger('score')->default(0)->comment('累计得星');
|
||||
$table->timestamps();
|
||||
|
||||
$table->comment('党员排名');
|
||||
|
|
@ -26,7 +26,9 @@ return new class extends Migration
|
|||
$table->id();
|
||||
$table->string('sn')->comment('期数(第一期: 202301)');
|
||||
$table->unsignedBigInteger('cate_id')->comment('支部(party_cates.id)');
|
||||
$table->unsignedInteger('score')->default(0)->comment('得分');
|
||||
$table->unsignedInteger('score')->default(0)->comment('累计得星');
|
||||
$table->unsignedInteger('avg_score')->default(0)->comment('人均得星');
|
||||
$table->unsignedInteger('count')->default(0)->comment('人数');
|
||||
$table->timestamps();
|
||||
|
||||
$table->comment('支部排名');
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ return [
|
|||
'master_id' => '书记',
|
||||
'plan_id' => '组织委员',
|
||||
'remarks' => '备注',
|
||||
'score' => '累计得分',
|
||||
'score' => '累计得星',
|
||||
'scores' => '五星维度',
|
||||
'current_score' => '当前得分',
|
||||
'current_score' => '当前得星',
|
||||
];
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ return [
|
|||
'avatar' => '头像',
|
||||
'cate_id' => '党支部',
|
||||
'remarks' => '备注',
|
||||
'score' => '累计得分',
|
||||
'current_score' => '当前得分',
|
||||
'score' => '累计得星',
|
||||
'current_score' => '当前得星',
|
||||
'scores' => '五星维度',
|
||||
];
|
||||
|
|
|
|||
|
|
@ -11,6 +11,8 @@ return [
|
|||
'sn' => '期数',
|
||||
'user_id' => '党员',
|
||||
'cate_id' => '支部',
|
||||
'score' => '得分',
|
||||
'score' => '累计得星',
|
||||
'avg_score' => '平均得星',
|
||||
'sort' => '排名',
|
||||
'count' => '人数',
|
||||
];
|
||||
|
|
|
|||
|
|
@ -16,5 +16,5 @@ return [
|
|||
'check_user_id' => '审核人',
|
||||
'check_remarks' => '未通过原因',
|
||||
'check_at' => '审核时间',
|
||||
'score' => '得分',
|
||||
'score' => '得星',
|
||||
];
|
||||
|
|
|
|||
|
|
@ -21,9 +21,15 @@ Route::get('banner', [\App\Http\Controllers\Api\BannerController::class, 'index'
|
|||
|
||||
Route::post('login', [\App\Http\Controllers\Api\AuthController::class, 'login']);
|
||||
|
||||
Route::get('rank', [\App\Http\Controllers\Api\RankController::class, 'index']);
|
||||
Route::get('rank/list', [\App\Http\Controllers\Api\RankController::class, 'list']);
|
||||
Route::get('rank/dates', [\App\Http\Controllers\Api\RankController::class, 'dates']);
|
||||
// 党支部排名
|
||||
Route::get('rank/cate', [\App\Http\Controllers\Api\CateRankController::class, 'index']);
|
||||
Route::get('rank/cate/dates', [\App\Http\Controllers\Api\CateRankController::class, 'dates']);
|
||||
Route::get('rank/cate/list', [\App\Http\Controllers\Api\CateRankController::class, 'list']);
|
||||
|
||||
// 党员排名
|
||||
Route::get('rank/user', [\App\Http\Controllers\Api\UserRankController::class, 'index']);
|
||||
Route::get('rank/user/dates', [\App\Http\Controllers\Api\UserRankController::class, 'dates']);
|
||||
Route::get('rank/user/list', [\App\Http\Controllers\Api\UserRankController::class, 'list']);
|
||||
|
||||
Route::get('article/common', [\App\Http\Controllers\Api\ArticleController::class, 'common']);
|
||||
|
||||
|
|
@ -36,8 +42,5 @@ Route::group(['middleware' => 'auth:api'], function () {
|
|||
|
||||
Route::get('article/cate', [\App\Http\Controllers\Api\ArticleController::class, 'cate']);
|
||||
|
||||
Route::get('rank/current', [\App\Http\Controllers\Api\RankController::class, 'current']);
|
||||
Route::get('rank/current-list', [\App\Http\Controllers\Api\RankController::class, 'currentList']);
|
||||
|
||||
Route::apiResource('user/score', \App\Http\Controllers\Api\UserScoreController::class);
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in New Issue