| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219 |
- <?php
- namespace app\models;
- use yii\behaviors\TimestampBehavior;
- /**
- * This is the model class for table "{{%team_grades}}".
- *
- * @property integer $id
- * @property integer $store_id
- * @property string $name
- * @property integer $mobile
- * @property integer $user_id
- * @property integer $team_grades_level
- * @property float $price
- * @property float $total_price
- * @property integer $province_id
- * @property integer $city_id
- * @property integer $district_id
- * @property string $address
- * @property string $level_expires_ext
- * @property integer $level_expires
- * @property integer $is_delete
- * @property integer $created_at
- * @property integer $updated_at
- */
- class TeamGrades extends \yii\db\ActiveRecord
- {
- /**
- * 分红设置:按天
- */
- const TEAM_CYCLE_TYPE_DAY = 0;
- /**
- * 分红设置:按周
- */
- const TEAM_CYCLE_TYPE_WEEK = 1;
- /**
- * 分红设置:按月
- */
- const TEAM_CYCLE_TYPE_MONTH = 2;
- /**
- * 分红设置 业绩统计规则:按产品分红值
- */
- const TEAM_AMOUNT_RULE_TYPE_GOODS = 0;
- /**
- * 分红设置 业绩统计规则:按实际支付金额
- */
- const TEAM_AMOUNT_RULE_TYPE_ORDER = 1;
- /**
- * 分红设置 奖励类型:业绩阶梯模式
- */
- const TEAM_BONUS_TYPE_LADDER = 0;
- /**
- * 分红设置 奖励类型:极差模式
- */
- const TEAM_BONUS_TYPE_DIFF = 1;
- /**
- * {@inheritdoc}
- */
- public static function tableName()
- {
- return '{{%team_grades}}';
- }
- /**
- * @inheritdoc
- */
- public function rules()
- {
- return [
- [['id', 'store_id', 'mobile', 'user_id', 'team_grades_level', 'province_id', 'city_id', 'district_id', 'is_delete', 'created_at', 'updated_at', 'level_expires'], 'integer'],
- [['name', 'address', 'level_expires_ext'], 'string'],
- [['price', 'total_price'], 'number']
- ];
- }
- public function behaviors()
- {
- return [
- [
- 'class' => TimestampBehavior::class
- ]
- ];
- }
- /**
- * @inheritdoc
- */
- public function attributeLabels()
- {
- return [
- 'id' => '',
- 'store_id' => '',
- 'name' => '姓名',
- 'mobile' => '手机号',
- 'user_id' => '商城用户iD',
- 'team_grades_level' => '申请等级',
- 'total_price' => '累计分红金额',
- 'price' => '可提现分红金额',
- 'province_id' => '省ID',
- 'city_id' => '市ID',
- 'district_id' => '区ID',
- 'address' => '详细地址',
- 'is_delete' => '',
- 'created_at' => '',
- 'updated_at' => '',
- 'level_expires' => '等级有效期',
- 'level_expires_ext' => '等级有效期备注信息'
- ];
- }
- public function beforeSave($insert)
- {
- if (parent::beforeSave($insert)) {
- if ($insert) {
- $teamGrades = self::findOne(['user_id' => $this->user_id, 'is_delete' => 0]);
- if ($teamGrades) {
- $this->addError('user', '操作失败,用户已经存在');
- return false;
- }
- }
- return true;
- }
- return false;
- }
- public function afterSave($insert, $changedAttributes)
- {
- if (isset($changedAttributes['team_grades_level']) || $insert) {
- $teamGrades = self::findOne($this->id);
- $level = TeamGradesLevel::findOne(['level' => $teamGrades->team_grades_level, 'store_id' => $this->store_id, 'is_delete' => 0]);
- $result = self::handleUserLevelExpires($level, $teamGrades);
- $teamGrades->level_expires_ext = json_encode($result['level_expires_ext'], JSON_UNESCAPED_UNICODE);
- $teamGrades->level_expires = $result['expires_in'];
- $teamGrades->save();
- }
- parent::afterSave($insert, $changedAttributes); // TODO: Change the autogenerated stub
- }
- public static function getUserTeamGrades($user_id)
- {
- $team_grades = self::find()->where(['user_id' => $user_id, 'is_delete' => 0])
- ->select('id, user_id, store_id, name, mobile, team_grades_level, price, total_price')->asArray()->one();
- if (empty($team_grades)) {
- $store_id = User::findOne($user_id)->store_id;
- return [
- 'id' => 0,
- 'user_id' => $user_id,
- 'store_id' => $store_id,
- 'price' => 0,
- 'total_price' => 0,
- 'name' => '',
- 'mobile' => '',
- 'team_grades_level' => 0,
- 'team_grades_level_name' => '无等级',
- 'tiered_bonus' => 0,
- ];
- }
- $team_grades['team_grades_level_name'] = TeamGradesLevel::getLevelInfo($team_grades['team_grades_level'], $team_grades['store_id'], 'level_name') ?: '无等级';
- $team_grades['tiered_bonus'] = TeamGradesLevel::getLevelInfo($team_grades['team_grades_level'], $team_grades['store_id'], 'tiered_bonus') ?: 0;
- return $team_grades;
- }
- //处理团队等级有效期
- public static function handleUserLevelExpires($level, $teamGrades) {
- if (!$level || !$teamGrades) {
- return ['level_expires_ext' => [], 'expires_in' => 0];
- }
- // 会员等级新增有效期时间
- $expires_in = 0;
- //购买会员有限期 0为永久
- if ($level->expires_in > 0) {
- $expires_in = strtotime('+' . $level->expires_in . ' day');
- if ($level->expires_type) {
- $expires_in = strtotime('+' . $level->expires_in . ' month');//月
- }
- }
- $level_expires_ext = [['level' => $teamGrades->team_grades_level, 'expires_in' => $expires_in]];
- if ($teamGrades->level_expires_ext) {
- $level_expires_ext = json_decode($teamGrades->level_expires_ext, true);
- //给新的加上 排序(按等级) 并且 去除已经过期的 作为新的一个json
- array_push($level_expires_ext, ['level' => $teamGrades->team_grades_level, 'expires_in' => $expires_in]);
- //排序
- $last_names = array_column($level_expires_ext, 'level');
- array_multisort($last_names, SORT_DESC, $level_expires_ext);
- //去除已经过期的
- foreach ($level_expires_ext as $user_level_index => $user_level_item) {
- // 去除已经过期的
- if ($user_level_item['expires_in'] > 0 && $user_level_item['expires_in'] <= time()) {
- unset($level_expires_ext[$user_level_index]);
- }
- }
- $level_expires_ext = array_values($level_expires_ext);
- }
- return ['level_expires_ext' => $level_expires_ext, 'expires_in' => $expires_in];
- }
- }
|