1
0
Fork 0

党支部平均分排名

master
panliang 2023-12-10 13:28:17 +08:00
parent 6938324dd6
commit 9b01f3e362
10 changed files with 202 additions and 23 deletions

View File

@ -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,
];

View File

@ -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]);
}
}

View File

@ -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]);
}
}

View File

@ -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()
{

View File

@ -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('支部排名');

View File

@ -9,7 +9,7 @@ return [
'master_id' => '书记',
'plan_id' => '组织委员',
'remarks' => '备注',
'score' => '累计得',
'score' => '累计得',
'scores' => '五星维度',
'current_score' => '当前得',
'current_score' => '当前得',
];

View File

@ -11,7 +11,7 @@ return [
'avatar' => '头像',
'cate_id' => '党支部',
'remarks' => '备注',
'score' => '累计得',
'current_score' => '当前得',
'score' => '累计得',
'current_score' => '当前得',
'scores' => '五星维度',
];

View File

@ -11,6 +11,8 @@ return [
'sn' => '期数',
'user_id' => '党员',
'cate_id' => '支部',
'score' => '得分',
'score' => '累计得星',
'avg_score' => '平均得星',
'sort' => '排名',
'count' => '人数',
];

View File

@ -16,5 +16,5 @@ return [
'check_user_id' => '审核人',
'check_remarks' => '未通过原因',
'check_at' => '审核时间',
'score' => '得',
'score' => '得',
];

View File

@ -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);
});