MemberBenefit.php 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. <?php
  2. namespace common\models\user;
  3. use common\enums\StatusEnum;
  4. use common\models\base\BaseActiveRecord;
  5. use common\models\order\Order;
  6. use common\models\user\UserLevelExpired;
  7. use PHPUnit\Util\Exception;
  8. use Yii;
  9. /**
  10. * This is the model class for table "qimall_member_benefit".
  11. *
  12. *
  13. * @property int $id
  14. * @property int $level_id 会员等级id
  15. * @property string $title 标题
  16. * @property string $content 内容
  17. * @property string $pic_url 图片
  18. * @property int|null $status 状态[-1:删除;0:禁用;1启用]
  19. * @property int $created_at
  20. * @property int $updated_at
  21. */
  22. class MemberBenefit extends BaseActiveRecord
  23. {
  24. /**
  25. * {@inheritdoc}
  26. */
  27. public static function tableName()
  28. {
  29. return '{{%member_benefit}}';
  30. }
  31. /**
  32. * {@inheritdoc}
  33. */
  34. public function rules()
  35. {
  36. return [
  37. [['level_id', 'status', 'created_at', 'updated_at'], 'integer'],
  38. [['title'], 'string', 'max' => 65],
  39. [['content', 'pic_url'], 'string', 'max' => 255],
  40. ];
  41. }
  42. /**
  43. * {@inheritdoc}
  44. */
  45. public function attributeLabels()
  46. {
  47. return [
  48. 'id' => 'ID',
  49. 'level_id' => '会员等级id',
  50. 'title' => '标题',
  51. 'content' => '内容',
  52. 'pic_url' => '图片',
  53. 'status' => '状态[-1:删除;0:禁用;1启用]',
  54. 'created_at' => 'Created At',
  55. 'updated_at' => 'Updated At',
  56. ];
  57. }
  58. /**
  59. * @desc:保存数据
  60. * @Author: hua
  61. * @Date: 2021/10/29
  62. * @Time: 11:28
  63. * @Copyright: copyright (c) 2021 广东七件事集团
  64. * @param array $params
  65. * @return MemberBenefit|false|null
  66. */
  67. public static function setData(array $params)
  68. {
  69. try {
  70. self::updateAll(['status' => StatusEnum::DELETE], ['and', ['level_id' => $params['level_id']], ['not in', 'id', array_column($params['benefits'], 'id')]]);
  71. foreach ($params['benefits'] as $benefit) {
  72. if (!empty($benefit['id'])) {
  73. $model = self::findOne(['id' => $benefit['id'], 'status' => [StatusEnum::ENABLED, StatusEnum::DISABLED]]);
  74. if (empty($model)) {
  75. $model = new self();
  76. $model->loadDefaultValues();
  77. }
  78. } else {
  79. $model = new self();
  80. $model->loadDefaultValues();
  81. }
  82. $benefit['level_id'] = $params['level_id'];
  83. if (!$model->load($benefit, '') || !$model->save()) throw new \Exception($model->getErrorMessage());
  84. }
  85. return true;
  86. } catch (\Exception $e) {
  87. self::$static_error = $e->getMessage();
  88. return false;
  89. }
  90. }
  91. /**
  92. * @desc:会员权益表
  93. * @Author: hua
  94. * @Date: 2021/10/29
  95. * @Time: 11:31
  96. * @Copyright: copyright (c) 2021 广东七件事集团
  97. */
  98. public static function memberBenefitList($params)
  99. {
  100. $cond = [];
  101. $where = [];
  102. $where[] = ['mall_id' => $params['mall_id']];
  103. $where[] = ['status' => StatusEnum::ENABLED];
  104. $cond['where'] = $where;
  105. $cond['select'] = 'id,name,pic_url,level';
  106. $cond['with'] = ['memberBenefitList' => function ($query) {
  107. $query->where(['status' => StatusEnum::ENABLED])->select('id,level_id,title,content, pic_url as picUrl');
  108. }];
  109. $cond['order'] = 'level asc';
  110. $user_level_list = UserLevel::lists($cond);
  111. $max_money = 0;
  112. // 当前用户已消费金额
  113. $where = ['user_id' => $params['user_id'], 'mall_id' => $params['mall_id'], 'pay_status' => 1];
  114. $user_member_money = Order::find()->where($where)->sum('pay_money');
  115. $where = [];
  116. $where[] = ['mall_id' => $params['mall_id']];
  117. $where[] = ['>', 'level', $params['level']];
  118. $where[] = ['status' => StatusEnum::ENABLED];
  119. $user_level = UserLevel::getOne($where, true, ['upgradeCondition'], 'level asc');
  120. $up_data["next_level"] = 0;
  121. if (!empty($user_level)) {
  122. if (!empty($user_level['upgradeCondition']['is_auto_upgrade'])) $up_data["next_level"] = $user_level['level'];
  123. } else {
  124. //最高等级则显示当前等级
  125. $max_money = $user_member_money;
  126. $up_data["next_level"] = $params['level'];
  127. }
  128. // $up_data["max_money"] = $max_money;
  129. $up_data["money"] = $user_member_money ?? 0;
  130. $up_data["level"] = $params['level'];
  131. $balance_name = \Yii::$app->services->setting->mall->get($params['mall_id'], 'balance.balance_name');
  132. $user_wallet = UserWallet::findOne(['user_id'=>$params['user_id']]);
  133. //会员期限
  134. $user_level_expired = '';
  135. $user_level = UserLevel::findOne(['mall_id'=>$params['mall_id'],'level'=>$up_data['level'],'status'=>StatusEnum::ENABLED]);
  136. if($user_level && isset($user_level['is_open_expired']) && $user_level['is_open_expired']){
  137. $user_level_expired = UserLevelExpired::findOne(['user_id'=> $params['user_id'],'level'=>$user_level['level'],'status'=>StatusEnum::ENABLED]);
  138. if($user_level_expired){
  139. $user_level_expired = date('Y-m-d H:i:s', $user_level_expired['expired_at']);
  140. }
  141. }
  142. $up_data['user_level_expired'] = $user_level_expired;
  143. return [
  144. 'member_benefit_list' => $user_level_list,
  145. 'up_data' => $up_data,
  146. 'balance_name' => !empty($balance_name) ? $balance_name : '余额',
  147. 'balance' => $user_wallet['balance']??0,
  148. ];
  149. }
  150. }