UserTeamForm.php 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. <?php
  2. namespace common\models\forms;
  3. use common\helpers\Date;
  4. use common\components\Model;
  5. use common\helpers\Form;
  6. use common\helpers\Log;
  7. use common\models\BonusAsync;
  8. use common\models\Period;
  9. use common\models\UserInfo;
  10. use common\models\UserNetwork;
  11. use common\models\UserRelation;
  12. use common\models\UserTeam;
  13. use yii\base\Exception;
  14. /**
  15. * Login form
  16. */
  17. class UserTeamForm extends Model {
  18. public $id;
  19. public $teamName;
  20. public $leaderUserName;
  21. public $remark;
  22. private $_leaderUid;
  23. private $_tempTeamLeaders = []; // 用于循环给下级设置团队的时候,临时设置子集领导的数组
  24. private $_limit = 2;
  25. /**
  26. * @inheritdoc
  27. */
  28. public function rules() {
  29. return [
  30. [['id', 'teamName', 'leaderUserName', 'remark'], 'trim'],
  31. [['id', 'teamName', 'leaderUserName'], 'required'],
  32. [['leaderUserName'], 'unique', 'targetClass' => UserTeam::class, 'targetAttribute' => 'TEAM_NAME'],
  33. [['leaderUserName'], 'exist', 'targetClass' => UserInfo::class, 'targetAttribute' => 'USER_NAME'],
  34. [['id'], 'exist', 'targetClass' => UserTeam::class, 'targetAttribute' => 'ID', 'on'=>'renewTeam'],
  35. [['leaderUserName'], 'isLeaderUser'],
  36. ];
  37. }
  38. /**
  39. * 指定校验场景
  40. * @return array
  41. */
  42. public function scenarios() {
  43. $parentScenarios = parent::scenarios();
  44. $customScenarios = [
  45. 'add' => ['teamName', 'leaderUserName','remark'],
  46. 'edit' => ['teamName','leaderUserName', 'remark'],
  47. 'renewTeam' => ['id'],
  48. ];
  49. return array_merge($parentScenarios, $customScenarios);
  50. }
  51. public function attributeLabels() {
  52. return [
  53. 'teamName' => '团队名称',
  54. 'leaderUserName' => '领导人会员编号',
  55. ];
  56. }
  57. public function isLeaderUser($attributes) {
  58. $leaderUserInfo = UserInfo::findOneAsArray(['USER_NAME' => $this->leaderUserName]);
  59. if ($leaderUserInfo) {
  60. $this->_leaderUid = $leaderUserInfo['USER_ID'];
  61. }
  62. }
  63. /**
  64. * 页面端编辑
  65. * @return UserTeam|null|static
  66. * @throws \yii\db\Exception
  67. */
  68. public function edit() {
  69. if (!$this->validate()) {
  70. return null;
  71. }
  72. return $this->_editHandle();
  73. }
  74. /**
  75. * 恢复
  76. * @return UserTeam|null
  77. * @throws \yii\db\Exception
  78. */
  79. public function renewTeam(){
  80. if (!$this->validate()) {
  81. return null;
  82. }
  83. return $this->_editHandle();
  84. }
  85. /**
  86. * 删除团队的
  87. * @param $id
  88. * @throws Exception
  89. */
  90. public function delete($id) {
  91. $period = Period::instance();
  92. $model = UserTeam::findOne(['ID' => $id]);
  93. $model->UPDATED_AT = Date::nowTime();
  94. $model->UPDATE_PERIOD_NUM = $period->getNowPeriodNum();
  95. $model->UPDATE_ADMIN = \Yii::$app->user->id;
  96. if (!$model->save()) {
  97. throw new Exception(Form::formatErrorsForApi($model->getErrors()));
  98. }
  99. $leaderUid = $model->LEADER_UID;
  100. // 把该团队对应的领导人及下级所有是该团队的会员,全部改为上级的团队
  101. // 获取该团队的上级会员所在的团队
  102. $parentUserInfo = UserNetwork::getFirstParentUserInfo($leaderUid);
  103. if ($parentUserInfo) {
  104. $newTeamId = $parentUserInfo['TEAM_ID'];
  105. } else {
  106. $newTeamId = null;
  107. }
  108. // 把该团队的所有团队都改成新团队
  109. UserInfo::updateAll(['TEAM_ID' => $newTeamId], 'TEAM_ID=:TEAM_ID AND IS_TEAM_LEADER=0', [':TEAM_ID' => $id]);
  110. }
  111. /**
  112. * 处理编辑
  113. * @return UserTeam|null
  114. * @throws \yii\db\Exception
  115. */
  116. private function _editHandle() {
  117. $transaction = \Yii::$app->db->beginTransaction();
  118. try {
  119. $period = Period::instance();
  120. if ($this->scenario == 'add') {
  121. $model = new UserTeam();
  122. $model->TEAM_NAME = $this->teamName;
  123. $model->LEADER_UID = $this->_leaderUid;
  124. $model->PERIOD_NUM = $period->getNowPeriodNum();
  125. $model->CREATE_REMARK = $this->remark;
  126. $model->CREATE_ADMIN = \Yii::$app->user->id;
  127. $model->CREATED_AT = Date::nowTime();
  128. } elseif ($this->scenario == 'edit') {
  129. $model = UserTeam::findOne(['ID' => $this->id]);
  130. if($model->IS_DEL){
  131. $this->addError('id', '该团队已被撤销,不能编辑');
  132. return null;
  133. }
  134. $model->TEAM_NAME = $this->teamName;
  135. $model->LEADER_UID = $this->_leaderUid;
  136. $model->UPDATED_AT = Date::nowTime();
  137. $model->UPDATE_PERIOD_NUM = $period->getNowPeriodNum();
  138. $model->UPDATE_ADMIN = \Yii::$app->user->id;
  139. $model->CREATE_REMARK = $this->remark;
  140. } elseif ($this->scenario == 'renewTeam') {
  141. $model = UserTeam::findOne(['ID' => $this->id]);
  142. $model->IS_DEL = 0;
  143. $model->UPDATED_AT = Date::nowTime();
  144. $model->UPDATE_PERIOD_NUM = $period->getNowPeriodNum();
  145. $model->UPDATE_ADMIN = \Yii::$app->user->id;
  146. $this->_leaderUid = $model->LEADER_UID;
  147. }else {
  148. $this->addError('id', '提交场景不存在');
  149. return null;
  150. }
  151. if (!$model->save()) {
  152. throw new Exception(Form::formatErrorsForApi($model->getErrors()));
  153. }
  154. // 下级会员全部变成该团队的会员
  155. //if ($this->scenario == 'add') {
  156. // 自己也变成该团队
  157. UserInfo::updateAll(['TEAM_ID' => $model->ID, 'IS_TEAM_LEADER'=>1], 'USER_ID=:USER_ID', [':USER_ID' => $this->_leaderUid]);
  158. $this->_childrenChangeTeam($this->_leaderUid, $model->ID);
  159. //}
  160. $transaction->commit();
  161. } catch (Exception $e) {
  162. $transaction->rollBack();
  163. $this->addError('edit', $e->getMessage());
  164. return null;
  165. }
  166. return $model;
  167. }
  168. /**
  169. * 改变子会员的团队
  170. * @param $userId
  171. * @param $teamId
  172. * @throws \yii\db\Exception
  173. */
  174. private function _childrenChangeTeam($userId, $teamId){
  175. // 查询子会员里面是团队领导人的所有子会员
  176. $allChildTeamLeader = UserNetwork::find()->select('UR.*,UI.TEAM_ID')->from(UserNetwork::tableName().' AS UR')->join('LEFT JOIN', UserInfo::tableName().' AS UI', 'UI.USER_ID=UR.USER_ID')->where('UR.PARENT_UID=:PARENT_UID AND UI.IS_TEAM_LEADER=1', [':PARENT_UID'=>$userId])->asArray()->all();
  177. // 先把所有子会员的团队,全部改成新团队
  178. $sql = "UPDATE {{%USER_INFO}} UI SET UI.TEAM_ID=:TEAM_ID WHERE EXISTS (SELECT UR.USER_ID FROM {{%USER_NETWORK}} UR WHERE UI.USER_ID=UR.USER_ID AND UR.PARENT_UID=:PARENT_UID)";
  179. \Yii::$app->db->createCommand($sql)->bindValues([':TEAM_ID'=>$teamId, ':PARENT_UID'=>$userId])->query();
  180. // 循环把所有子会员的团队都设置了
  181. foreach($allChildTeamLeader as $ChildTeamLeader){
  182. UserInfo::updateAll(['TEAM_ID' => $ChildTeamLeader['TEAM_ID']], 'USER_ID=:USER_ID', [':USER_ID' => $ChildTeamLeader['USER_ID']]);
  183. $sql = "UPDATE {{%USER_INFO}} UI SET UI.TEAM_ID=:TEAM_ID WHERE EXISTS (SELECT UR.USER_ID FROM {{%USER_NETWORK}} UR WHERE UI.USER_ID=UR.USER_ID AND UR.PARENT_UID=:PARENT_UID)";
  184. \Yii::$app->db->createCommand($sql)->bindValues([':TEAM_ID'=>$ChildTeamLeader['TEAM_ID'], ':PARENT_UID'=>$ChildTeamLeader['USER_ID']])->query();
  185. }
  186. }
  187. }