DecRoleLogForm.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  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\snowflake\SnowFake;
  7. use common\helpers\user\Info;
  8. use common\helpers\Validator;
  9. use common\libs\logging\operate\AdminOperate;
  10. use common\models\Ad;
  11. use common\models\AdLocation;
  12. use common\models\Article;
  13. use common\models\DecLevelLog;
  14. use common\models\DecRole;
  15. use common\models\DecRoleLog;
  16. use common\models\Period;
  17. use common\models\DeclarationLevel;
  18. use common\models\User;
  19. use common\models\UserInfo;
  20. use yii\base\Exception;
  21. use yii\validators\UrlValidator;
  22. /**
  23. * Login form
  24. */
  25. class DecRoleLogForm extends Model
  26. {
  27. public $userName;
  28. public $levelId;
  29. public $remark;
  30. private $_userId;
  31. private $_fromId;
  32. public function init() {
  33. parent::init();
  34. $this->adminOperateLogger = new AdminOperate([
  35. 'fetchClass' => User::class,
  36. ]);
  37. }
  38. /**
  39. * @inheritdoc
  40. */
  41. public function rules()
  42. {
  43. return [
  44. [['userName', 'levelId', 'remark'], 'trim'],
  45. [['userName', 'levelId'], 'required'],
  46. [['userName'], 'exist', 'targetClass'=>User::class, 'targetAttribute'=>'USER_NAME'],
  47. [['levelId'], 'exist', 'targetClass'=>DecRole::class, 'targetAttribute'=>'ID'],
  48. [['userName'], 'isUser'],
  49. [['levelId'], 'isLevel'],
  50. ];
  51. }
  52. public function attributeLabels()
  53. {
  54. return [
  55. 'userName' => '会员编号',
  56. 'levelId' => '级别',
  57. 'remark' => '期数',
  58. ];
  59. }
  60. /**
  61. * 指定校验场景
  62. * @return array
  63. */
  64. public function scenarios()
  65. {
  66. $parentScenarios = parent::scenarios();
  67. $customScenarios = [
  68. 'adminChange' => ['userName', 'levelId', 'remark'],
  69. ];
  70. return array_merge($parentScenarios, $customScenarios);
  71. }
  72. /**
  73. * 赋值UserId并校验会员是否存在
  74. * @param $attribute
  75. */
  76. public function isUser($attribute){
  77. $this->_userId = Info::getUserIdByUserName($this->userName);
  78. if(!$this->_userId){
  79. $this->addError($attribute, 'Member does not exist'); // 会员不存在
  80. }
  81. }
  82. /**
  83. * 查看级别是否有变化
  84. * @param $attribute
  85. */
  86. public function isLevel($attribute){
  87. $baseUserInfo = User::findOneAsArray('ID=:ID', [':ID' => $this->_userId], 'ID,USER_NAME,IS_DEC,DEC_ROLE_ID');
  88. if( $baseUserInfo['IS_DEC'] == 0 ) {
  89. $this->addError($attribute, '只有报单中心才能修改报单中心级别');
  90. return false;
  91. }
  92. $this->_fromId = $baseUserInfo['DEC_ROLE_ID'] ?? '';
  93. unset($baseUserInfo);
  94. if($this->levelId == $this->_fromId){
  95. $this->addError($attribute, '级别没有变化无需调整');
  96. }
  97. }
  98. /**
  99. * 报单中心级别调整操作
  100. * @return boolean
  101. * @throws \yii\db\Exception
  102. */
  103. public function adminChange(){
  104. if(!$this->validate()){
  105. return false;
  106. }
  107. $this->adminOperateLogger->beforeUpdate($this->_userId,'ID',['select'=>'ID,DEC_ROLE_ID']);
  108. $db = \Yii::$app->db;
  109. $transaction = $db->beginTransaction();
  110. try {
  111. // 新增数据
  112. DecRoleLog::insertOne([
  113. 'ID' => SnowFake::instance()->generateId(),
  114. 'USER_ID' => $this->_userId,
  115. 'FROM_ID' => $this->_fromId,
  116. 'TO_ID' => $this->levelId,
  117. 'PERIOD_NUM' => 0,
  118. 'CALC_MONTH' => 0,
  119. 'REMARK' => $this->remark,
  120. 'STATUS' => 1,
  121. 'ADMIN_ID' => \Yii::$app->user->id,
  122. 'CREATED_AT' => Date::nowTime(),
  123. ]);
  124. User::updateAll(['DEC_ROLE_ID' => $this->levelId], 'ID=:ID', [':ID' => $this->_userId]);
  125. $transaction->commit();
  126. } catch (Exception $e) {
  127. $transaction->rollBack();
  128. $this->addError('adminChange', $e->getMessage());
  129. return false;
  130. }
  131. $this->adminOperateLogger->afterUpdate($this->_userId,'ID',['select'=>'ID,DEC_ROLE_ID'])->clean()->save([
  132. 'optType' => '修改报单中心级别',
  133. 'userId' => $this->_userId,
  134. 'userName' => Info::getUserNameByUserId($this->_userId),
  135. 'remark' => $this->remark
  136. ]);
  137. return true;
  138. }
  139. }