adminOperateLogger = new AdminOperate([ 'fetchClass' => User::class, ]); } /** * @inheritdoc */ public function rules() { return [ [['userName', 'nation', 'realName', 'idCard', 'mobile', 'address', 'openBank', 'bankAddress', 'bankNo', 'bankAreaSelected', 'decLv', 'areaSelected', 'tel', 'isDec', 'decUserName', 'birthday', 'decRoleId', 'conUserName', 'recUserName', 'location', 'delUserName'], 'trim'], [['userName', 'realName', 'idCard', 'decLv', 'decUserName', 'conUserName', 'recUserName', 'location'], 'required'], [['userName'], 'unique', 'targetClass' => UserInfo::class, 'targetAttribute' => 'USER_NAME'], [['conUserName'], 'exist', 'targetClass' => UserInfo::class, 'targetAttribute' => 'USER_NAME'], [['recUserName'], 'exist', 'targetClass' => UserInfo::class, 'targetAttribute' => 'USER_NAME'], [['decLv'], 'exist', 'targetClass' => DeclarationLevel::class, 'targetAttribute' => 'ID'], [['mobile'], 'mobile'], [['idCard'], 'simpleIdCard'], [['bankNo'], 'string', 'max' => 19], [['decUserName'], 'issetDec'], [['isDec'], 'issetDecRoleId'], [['location'], 'isLocation'], [['delUserName'], 'isDelUserName'], //[['userName'], 'userName'], [['realName', 'address', 'bankAddress'], 'realName'], ]; } /** * 指定校验场景 * @return array */ public function scenarios() { $parentScenarios = parent::scenarios(); $customScenarios = [ 'add' => ['userName', 'nation', 'realName', 'idCard', 'mobile', 'address', 'openBank', 'bankAddress', 'bankNo', 'bankAreaSelected', 'decLv', 'areaSelected', 'tel', 'isDec', 'decUserName', 'birthday', 'decRoleId', 'conUserName', 'recUserName', 'location'], 'userDel' => ['delUserName'], ]; return array_merge($parentScenarios, $customScenarios); } public function attributeLabels() { return [ 'userName' => '会员编号', 'nation' => '民族', 'realName' => '会员姓名', 'idCard' => '身份证号', 'mobile' => '手机号', 'address' => '地址', 'openBank' => '开户行', 'bankAddress' => '开户支行', 'bankNo' => '银行账号', 'bankAreaSelected' => '银行地区', 'decLv' => '实时报单级别', 'areaSelected' => '所在地区', 'tel' => '电话', 'isDec' => '是否报单中心', 'decUserName' => '报单中心编号', 'birthday' => '生日', 'decRoleId' => '报单中心级别', 'conUserName' => '接点人会员编号', 'recUserName' => '开拓人会员编号', 'location' => '安置区域', ]; } /** * 是否存在报单中心 * @param $attribute */ public function issetDec($attribute) { if (!$decUser = User::find()->select('ID')->where('IS_DEC=1 AND USER_NAME=:USER_NAME', [':USER_NAME' => $this->decUserName])->asArray()->one()) { $this->addError($attribute, '报单中心不存在'); } else { $this->_decId = $decUser['ID']; } } /** * 校验是否填写报单中心级别 * @param $attribute */ public function issetDecRoleId($attribute) { if ($this->isDec && !$this->decRoleId) { $this->addError($attribute, '报单中心级别不能为空'); } } public function isLocation($attribute) { if (!in_array($this->location, ['1', '2', '3'])) { $this->addError($attribute, '区位错误'); } } /** * 校验删除的用户是否符合条件 * @param $attribute */ public function isDelUserName($attribute) { if (!$this->_delUserId = Info::getUserIdByUserName($this->delUserName)) { $this->addError($attribute, '用户不存在'); } if (UserInfo::findOneAsArray('REC_UID=:REC_UID AND DELETED=0', [':REC_UID' => $this->_delUserId], 'USER_ID')) { $this->addError($attribute, '此会员已开拓其它会员不可以删除'); } if (UserInfo::findOneAsArray('CON_UID=:CON_UID AND DELETED=0', [':CON_UID' => $this->_delUserId], 'USER_ID')) { $this->addError($attribute, '此会员已安置其它会员不可以删除'); } if (User::findOneAsArray('DEC_ID=:DEC_ID AND DELETED=0', [':DEC_ID' => $this->_delUserId], 'ID')) { $this->addError($attribute, '此会员已报单其它会员不可以删除'); } if (DecOrder::findOneAsArray('USER_ID=:TO_USER_ID OR TO_USER_ID=:TO_USER_ID', [':TO_USER_ID' => $this->_delUserId], 'ID')) { $this->addError($attribute, '此会员已报单不可以删除'); } $info = Info::baseInfoWithNet($this->_delUserId); if ($info['REG_FROM'] == 1) { $this->addError($attribute, '此会员不是空单无法删除'); } $sentMaxPeriodNum = Period::sentMaxPeriodNum(); if ($info['PERIOD_AT'] <= $sentMaxPeriodNum) { $this->addError($attribute, '此会员加入期数小于等于已挂网期数'); } if (User::find()->where('ID=:ID AND VERIFIED=1', [':ID' => $this->_delUserId])->exists()) { $this->addError($attribute, '此会员已实名认证无法删除'); } if (User::find()->where('ID=:ID AND SUB_COM_LEADER=1', [':ID' => $this->_delUserId])->exists()) { $this->addError($attribute, '此会员是分公司领导人无法删除'); } if (UserInfo::find()->where('USER_ID=:USER_ID AND (IS_GROUP_LEADER=1 OR IS_SYSTEM_LEADER=1 OR IS_BIND=1 OR IS_TEAM=1)', [':USER_ID' => $this->_delUserId])->exists()) { $this->addError($attribute, '此会员存在以下情况无法删除,团队领导人/体系领导人/点位绑定/点位合作'); } if (Balance::hasBonus($this->_delUserId)) { $this->addError($attribute, '此会员有余额无法删除'); } if (FlowBonus::findOneAsArray('USER_ID=:USER_ID', [':USER_ID' => $this->_delUserId], 'ID')) { $this->addError($attribute, '该会员产生过余额流水无法删除'); } if (UserMove::findOneAsArray('USER_ID=:USER_ID', [':USER_ID' => $this->_delUserId], 'ID')) { $this->addError($attribute, '该会员发生过移网无法删除'); } } /** * 添加 * @return User|null * @throws \yii\db\Exception */ public function edit() { $this->userName = strtoupper($this->userName); if (!$this->validate()) { return null; } $transactionShop = \Yii::$app->db->beginTransaction(); try { $period = Period::instance(); // 商城表增加会员 $user = new User(); $user->USER_NAME = $this->userName; $pwd = Info::passwordGenerator($this->idCard,$user->USER_NAME); $user->PASSWORD_HASH = \Yii::$app->security->generatePasswordHash($pwd); $pwd = Info::passwordGenerator($this->idCard,$user->USER_NAME,true); $user->PAY_PASSWORD = \Yii::$app->security->generatePasswordHash($pwd); $user->NATION = 0; $user->REAL_NAME = $this->realName; $user->ID_CARD = $this->idCard; $user->MOBILE = $this->mobile; $user->ADDRESS = '无'; $user->ADDRESS = $this->address ? $this->address : '无'; $user->OPEN_BANK = $this->openBank; $user->BANK_ADDRESS = $this->bankAddress; $user->BANK_NO = $this->bankNo; $user->BANK_PROVINCE = $this->bankAreaSelected[0] ?? '0'; $user->BANK_CITY = $this->bankAreaSelected[1] ?? '0'; $user->BANK_COUNTY = $this->bankAreaSelected[2] ?? '0'; $user->CREATED_AT = Date::nowTime(); $user->STATUS = 1; $user->DEC_LV = $this->decLv; $user->LAST_DEC_LV = $this->decLv; $user->EMP_LV = EmployLevel::getDefaultLevelId(); $user->PROVINCE = $this->areaSelected[0] ?? '0'; $user->CITY = $this->areaSelected[1] ?? '0'; $user->COUNTY = $this->areaSelected[2] ?? '0'; //$user->TEL = $this->tel; //$user->REG_IS_COMPLETED = 1; $user->AVATAR = 'avatar/1.png'; $user->IS_DEC = $this->isDec ? $this->isDec : 0; $user->DEC_ID = $this->_decId ?? null; //$user->BIRTHDAY = Date::ociToDate($this->birthday, Date::OCI_TIME_FORMAT_DATE); $user->DEC_ROLE_ID = $this->decRoleId ?? null; $user->PERIOD_AT = $period->getNowPeriodNum(); $user->REG_FROM = 0;//空单标识 $user->IS_DIRECT_SELLER = 0; $user->VERIFIED = 1; $user->VERIFIED_AT = Date::nowTime(); $user->USER_CREATOR = Admin::getAdminNameById(\Yii::$app->user->id); if (!$user->save()) { throw new Exception(Form::formatErrorsForApi($user->getErrors())); } // 获取报单级别的设置 $decLevelConfig = Cache::getDecLevelConfig(); $decLevelPv = $decLevelConfig[$this->decLv]['PERF']; $userForm = new UserForm(); $userForm->scenario = 'addByAdmin'; $userForm->userId = $user->ID; $userForm->userName = $this->userName; $userForm->zcAmount = $decLevelPv; $userForm->zcPv = $decLevelPv; $userForm->conUserName = $this->conUserName; $userForm->recUserName = $this->recUserName; $userForm->location = $this->location; if (!$userForm->add()) { throw new Exception(Form::formatErrorsForApi($userForm->getErrors())); } $transactionShop->commit(); } catch (Exception $e) { $transactionShop->rollBack(); $this->addError('add', $e->getMessage()); return null; } $select = new \yii\db\Expression('ID,REAL_NAME,ID_CARD,MOBILE,ADDRESS,OPEN_BANK,BANK_ADDRESS,BANK_NO,BANK_PROVINCE,BANK_CITY,BANK_COUNTY,CREATED_AT,DEC_LV,EMP_LV,PROVINCE,CITY,COUNTY,TEL,SUB_COM_ID,IS_DEC,DEC_ID,DEC_ROLE_ID,PERIOD_AT,REG_FROM'); $this->adminOperateLogger->afterInsert($user->ID, 'ID', ['select'=>$select]); $userData = $this->adminOperateLogger->saveAfterContent; $this->adminOperateLogger->fetchClass = UserInfo::class; $this->adminOperateLogger->afterInsert($user->ID, 'USER_ID', ['select'=>'USER_ID,CON_UID,REC_UID']); $infoData = $this->adminOperateLogger->saveAfterContent; $this->adminOperateLogger->saveAfterContent=array_merge($userData,$infoData); $this->adminOperateLogger->clean()->save([ 'optType' => '空单录入', 'userId' => $user->ID, 'userName' => $user->USER_NAME, ]); return $user; } /** * 删除会员 * @return null * @throws Exception * @throws \yii\db\Exception */ public function userDel() { if (!$this->validate()) { return null; } $select = new \yii\db\Expression('ID,REAL_NAME,ID_CARD,MOBILE,ADDRESS,OPEN_BANK,BANK_ADDRESS,BANK_NO,BANK_PROVINCE,BANK_CITY,BANK_COUNTY,CREATED_AT,DEC_LV,EMP_LV,PROVINCE,CITY,COUNTY,TEL,SUB_COM_ID,IS_DEC,DEC_ID,DEC_ROLE_ID,PERIOD_AT,REG_FROM'); $this->adminOperateLogger->beforeDelete($this->_delUserId, 'ID', ['select'=>$select]); $userData = $this->adminOperateLogger->saveBeforeContent; $this->adminOperateLogger->fetchClass = UserInfo::class; $this->adminOperateLogger->beforeDelete($this->_delUserId, 'USER_ID', ['select'=>'USER_ID,CON_UID,REC_UID']); $infoData = $this->adminOperateLogger->saveBeforeContent; $this->adminOperateLogger->saveBeforeContent=array_merge($userData,$infoData); $transaction = \Yii::$app->db->beginTransaction(); try { /*$user=User::findOne(['ID'=>$this->_delUserId]); $user->DELETED=1; $user->DELETED_AT=Date::nowTime(); if(!$user->save()){ throw new Exception(Form::formatErrorsForApi($user->getErrors())); } $userInfo=UserInfo::findOne(['USER_ID'=>$this->_delUserId]); $userInfo->DELETED=1; $userInfo->DELETED_AT=Date::nowTime(); if(!$userInfo->save()){ throw new Exception(Form::formatErrorsForApi($userInfo->getErrors())); }*/ //为释放用户名资源,彻底删除@190606 User::deleteAll('ID=:USER_ID', [':USER_ID' => $this->_delUserId]); // 获取会员信息 $userInfo = UserInfo::findOneAsArray('USER_ID=:USER_ID', [':USER_ID'=>$this->_delUserId]); // 调整上级会员的CON_NUM和REC_NUM if(!UserInfo::updateAllCounters(['CON_NUM'=> -1], "USER_ID=:USER_ID", [':USER_ID'=>$userInfo['CON_UID']])){ throw new Exception('减少上级会员接点数量失败'); } if(!UserInfo::updateAllCounters(['REC_NUM'=> -1], "USER_ID=:USER_ID", [':USER_ID'=>$userInfo['REC_UID']])){ throw new Exception('减少开拓人推荐数量失败'); } // 删除会员信息 if(!UserInfo::deleteAll('USER_ID=:USER_ID', [':USER_ID' => $this->_delUserId])){ throw new Exception('删除会员信息失败'); } //删除安置 if(!UserNetwork::deleteAll('USER_ID=:USER_ID', [':USER_ID' => $this->_delUserId])){ throw new Exception('删除会员安置数据失败'); } //删除开拓 if(!UserRelation::deleteAll('USER_ID=:USER_ID', [':USER_ID' => $this->_delUserId])){ throw new Exception('删除会员开拓数据失败'); } //删除点位绑定 UserBind::deleteAll('USER_ID=:USER_ID', [':USER_ID' => $this->_delUserId]); //删除合作 UserTeamwork::deleteAll('USER_ID=:USER_ID', [':USER_ID' => $this->_delUserId]); //删除奖金 UserBonus::deleteAll('USER_ID=:USER_ID', [':USER_ID' => $this->_delUserId]); $transaction->commit(); } catch (Exception $e) { $transaction->rollBack(); throw new Exception($e->getMessage()); } $this->adminOperateLogger->clean()->save([ 'optType' => '删除空单会员', ]); return $this->_delUserId; } }