UserLevelExpired.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. <?php
  2. namespace common\models\user;
  3. use common\enums\StatusEnum;
  4. use common\enums\UserBehaviorLogsEnum;
  5. use common\events\user\UserLevelExpiredEvent;
  6. use common\models\base\BaseActiveRecord;
  7. use PHPUnit\Util\Exception;
  8. use common\events\census\UserUpgradeAfterEvent;
  9. use common\models\user\User;
  10. use Yii;
  11. /**
  12. * This is the model class for table "{{%user_level}}".
  13. *
  14. *
  15. * @property int $id
  16. * @property int $mall_id
  17. * @property int $level 会员等级
  18. * @property string $name 等级名称
  19. * @property string $pic_url 图标
  20. * @property string $discount 折扣
  21. * @property int $status 状态[-1:删除;0:禁用;1启用]
  22. * @property int $created_at
  23. * @property int $updated_at
  24. */
  25. class UserLevelExpired extends BaseActiveRecord
  26. {
  27. /**
  28. * {@inheritdoc}
  29. */
  30. public static function tableName()
  31. {
  32. return '{{%user_level_expired}}';
  33. }
  34. /**
  35. * {@inheritdoc}
  36. */
  37. public function rules()
  38. {
  39. return [
  40. [['mall_id', 'level','user_id'], 'required'],
  41. [['mall_id', 'level', 'user_id','status', 'created_at', 'updated_at','expired_at'], 'integer'],
  42. ];
  43. }
  44. /**
  45. * {@inheritdoc}
  46. */
  47. public function attributeLabels()
  48. {
  49. return [
  50. 'id' => 'ID',
  51. 'mall_id' => 'Mall ID',
  52. 'level' => '会员等级',
  53. 'user_id' => 'User ID',
  54. 'status' => '状态[-1:删除;0:禁用;1启用]',
  55. 'created_at' => 'Created At',
  56. 'updated_at' => 'Updated At',
  57. 'expired_at' => 'Expired At',
  58. ];
  59. }
  60. /**
  61. * 保存数据
  62. * @param array $params
  63. * @return bool|UserLevel
  64. */
  65. public static function setData(array $params)
  66. {
  67. $t = Yii::$app->db->beginTransaction();
  68. try {
  69. if (!empty($params['id'])) {
  70. $model = self::findOne(['id' => $params['id'], 'status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]);
  71. if (empty($model)) throw new Exception('服务不存在或已删除');
  72. $where[] = ['<>', 'id', $params['id']];
  73. } else {
  74. $model = new self();
  75. $model->loadDefaultValues();
  76. }
  77. if (!$model->load($params, '') || !$model->save()) throw new Exception($model->getErrorMessage());
  78. $t->commit();
  79. return $model;
  80. } catch (Exception $e) {
  81. $t->rollBack();
  82. self::$static_error = $e->getMessage();
  83. return false;
  84. }
  85. }
  86. /**
  87. * 会员过期(过期后恢复到默认等级)
  88. * @param array $params
  89. * @return bool|UserLevel
  90. */
  91. public static function levelExpired($mall_id){
  92. try{
  93. $list = self::find()
  94. ->where(['status'=>StatusEnum::ENABLED,'mall_id'=>$mall_id])
  95. ->andWhere(['<','expired_at',time()])
  96. ->all();
  97. if(!empty($list)){
  98. foreach($list as $item){
  99. $user_extra = User::findOne(['id'=>$item->user_id,'level'=>$item->level]);
  100. if(!$user_extra){
  101. continue;
  102. }
  103. //查询修改前用户信息
  104. $user = User::getUser([['id' => $item->user_id,'mall_id' => $mall_id]],'*',[],1);
  105. $params = [];
  106. $params['id'] = $item->user_id;
  107. $params['user_id'] = $item->user_id;
  108. $params['mall_id'] = $mall_id;
  109. $params['level'] = 0;
  110. $res = User::change($params);
  111. if($res){
  112. \Yii::error('会员等级过期'.$item->user_id);
  113. $item->status = StatusEnum::DELETE;
  114. $item->save();
  115. //触发事件
  116. $event = new UserUpgradeAfterEvent($mall_id);
  117. $data = ['after_level' => $params['level'], 'before_level' => $user['level'],'mall_id'=>$mall_id,'user_id' => $params['user_id'], 'system_auto' => UserBehaviorLogsEnum::AUTO_DOWNGRADE_USER_LEVEL_EXPIRED];
  118. \Yii::$app->services->events->dispatch($event, $data, $event->listeners);
  119. // 会员过期事件
  120. $event = new UserLevelExpiredEvent($mall_id);
  121. $data = ['mall_id'=>$mall_id, 'user_id' => $params['user_id'], 'before_level' => $user['level'], 'after_level' => $params['level']];
  122. \Yii::$app->services->events->dispatch($event, $data, $event->listeners);
  123. }
  124. }
  125. }
  126. return true;
  127. }catch(\Exception $e){
  128. \Yii::error('会员等级过期'.$e->getMessage());
  129. return false;
  130. }
  131. }
  132. }