generated from panliang/owl-admin-starter
91 lines
2.6 KiB
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);
|
|
}
|
|
}
|
|
}
|