<?php
namespace app\store\model\dealer;
use app\store\model\dealer\Referee as RefereeModel;
use app\common\model\dealer\User as UserModel;
class User extends UserModel
{
public function getList($search = '')
{
$this->alias('dealer')
->field('dealer.*, user.nickName, user.avatarUrl')
->with(['referee'])
->join('user', 'user.user_id = dealer.user_id')
->where('dealer.is_delete', '=', 0)
->order(['dealer.create_time' => 'desc']);
!empty($search) && $this->where('user.nickName|dealer.real_name|dealer.mobile', 'like', "%$search%");
return $this->paginate(15, false, [
'query' => \request()->request()
]);
}
public function edit($data)
{
return $this->allowField(true)->save($data) !== false;
}
public function setDelete()
{
return $this->transaction(function () {
$RefereeModel = new RefereeModel;
$team1Ids = $RefereeModel->getTeamUserIds($this['user_id'], 1);
if (!empty($team1Ids)) {
$this->setFromplatform($team1Ids);
$referee1Id = RefereeModel::getRefereeUserId($this['user_id'], 1, true);
if ($referee1Id > 0) {
$this->setDecTeamNum($referee1Id, 2, count($team1Ids));
$team2Ids = $RefereeModel->getTeamUserIds($this['user_id'], 2);
!empty($team2Ids) && $this->setDecTeamNum($referee1Id, 3, count($team2Ids));
$referee2Id = RefereeModel::getRefereeUserId($this['user_id'], 2, true);
$referee2Id > 0 && $this->setDecTeamNum($referee2Id, 3, count($team1Ids));
$RefereeModel->onClearTop(array_merge($team1Ids, $team2Ids));
}
}
$RefereeModel->onClearTeam($this['user_id']);
return $this->delete();
});
}
private function setFromplatform($userIds)
{
return $this->isUpdate(true)->save(
['referee_id' => 0],
['user_id' => ['in', $userIds], 'is_delete' => 0]
);
}
public function onDeleteReferee($userId)
{
$list = RefereeModel::getRefereeList($userId);
if (!$list->isEmpty()) {
foreach ($list as $item) {
$item['dealer1'] && $this->setDecTeamNum($item['dealer_id'], $item['level'], 1);
}
(new RefereeModel)->onClearReferee($userId);
}
return true;
}
private function setDecTeamNum($dealerId, $level, $number)
{
$field = [1 => 'first_num', 2 => 'second_num', 3 => 'third_num'];
return $this->where('user_id', '=', $dealerId)
->where('is_delete', '=', 0)
->setDec($field[$level], $number);
}
public static function totalMoney($user_id, $money)
{
$model = self::detail($user_id);
return $model->save([
'freeze_money' => $model['freeze_money'] - $money,
'total_money' => $model['total_money'] + $money,
]);
}
public static function backFreezeMoney($user_id, $money)
{
$model = self::detail($user_id);
return $model->save([
'money' => $model['money'] + $money,
'freeze_money' => $model['freeze_money'] - $money,
]);
}
}