1
0
Fork 0
party-rank-server/app/Admin/Services/PartyUserService.php

91 lines
2.6 KiB
PHP

<?php
namespace App\Admin\Services;
use App\ModelFilters\PartyUserFilter;
use App\Models\Keyword;
use App\Models\PartyUser;
use App\Models\UserRank;
use App\Models\UserScore;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
class PartyUserService extends BaseService
{
protected array $withRelationships = ['cate'];
protected string $modelName = PartyUser::class;
protected string $modelFilterName = PartyUserFilter::class;
public function preDelete(array $ids)
{
// 删除审核记录
UserScore::whereIn('user_id', $ids)->delete();
// 删除党员排名记录
UserRank::whereIn('user_id', $ids)->delete();
return true;
}
public function validate($data, $model = null)
{
$createRules = [
'username' => ['required', Rule::unique('party_users', 'username')],
'password' => ['required'],
'name' => ['required'],
];
$updateRules = [
'username' => [Rule::unique('party_users', 'username')->ignore($model?->id)]
];
$validator = Validator::make($data, $model ? $updateRules : $createRules, [
'username.required' => __('party_user.username') . '必填',
'password.required' => __('party_user.password') . '必填',
'name.required' => __('party_user.name') . '必填',
'username.unique' => ':input 已经存在',
]);
if ($validator->fails()) {
return $validator->errors()->first();
}
return true;
}
public function resloveData($data, $model = null)
{
if (!$model) {
$list = UserScore::getTypeList();
$scores = [];
foreach ($list as $item) {
$scores[$item->key] = 0;
}
$data['scores'] = $scores;
}
return $data;
}
/**
* 增加党员得分
*
* @param PartyUser $user 党员
* @param string $type 类型 keywords(score_cate).key
* @param int $score 得分
* @return void
*/
public function incrementScore(PartyUser $user, string $type, int $score)
{
$scores = $user->scores;
if (isset($scores[$type])) {
$scores[$type] += $score;
}
$user->update([
'score' => $user->score + $score,
'current_score' => $user->current_score + $score,
'scores' => $scores,
]);
// 同时增加党支部的得分
if ($user->cate) {
PartyCateService::make()->incrementScore($user->cate, $type, $score);
}
}
}