TeamGrades.php 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. <?php
  2. namespace app\models;
  3. use yii\behaviors\TimestampBehavior;
  4. /**
  5. * This is the model class for table "{{%team_grades}}".
  6. *
  7. * @property integer $id
  8. * @property integer $store_id
  9. * @property string $name
  10. * @property integer $mobile
  11. * @property integer $user_id
  12. * @property integer $team_grades_level
  13. * @property float $price
  14. * @property float $total_price
  15. * @property integer $province_id
  16. * @property integer $city_id
  17. * @property integer $district_id
  18. * @property string $address
  19. * @property string $level_expires_ext
  20. * @property integer $level_expires
  21. * @property integer $is_delete
  22. * @property integer $created_at
  23. * @property integer $updated_at
  24. */
  25. class TeamGrades extends \yii\db\ActiveRecord
  26. {
  27. /**
  28. * 分红设置:按天
  29. */
  30. const TEAM_CYCLE_TYPE_DAY = 0;
  31. /**
  32. * 分红设置:按周
  33. */
  34. const TEAM_CYCLE_TYPE_WEEK = 1;
  35. /**
  36. * 分红设置:按月
  37. */
  38. const TEAM_CYCLE_TYPE_MONTH = 2;
  39. /**
  40. * 分红设置 业绩统计规则:按产品分红值
  41. */
  42. const TEAM_AMOUNT_RULE_TYPE_GOODS = 0;
  43. /**
  44. * 分红设置 业绩统计规则:按实际支付金额
  45. */
  46. const TEAM_AMOUNT_RULE_TYPE_ORDER = 1;
  47. /**
  48. * 分红设置 奖励类型:业绩阶梯模式
  49. */
  50. const TEAM_BONUS_TYPE_LADDER = 0;
  51. /**
  52. * 分红设置 奖励类型:极差模式
  53. */
  54. const TEAM_BONUS_TYPE_DIFF = 1;
  55. /**
  56. * {@inheritdoc}
  57. */
  58. public static function tableName()
  59. {
  60. return '{{%team_grades}}';
  61. }
  62. /**
  63. * @inheritdoc
  64. */
  65. public function rules()
  66. {
  67. return [
  68. [['id', 'store_id', 'mobile', 'user_id', 'team_grades_level', 'province_id', 'city_id', 'district_id', 'is_delete', 'created_at', 'updated_at', 'level_expires'], 'integer'],
  69. [['name', 'address', 'level_expires_ext'], 'string'],
  70. [['price', 'total_price'], 'number']
  71. ];
  72. }
  73. public function behaviors()
  74. {
  75. return [
  76. [
  77. 'class' => TimestampBehavior::class
  78. ]
  79. ];
  80. }
  81. /**
  82. * @inheritdoc
  83. */
  84. public function attributeLabels()
  85. {
  86. return [
  87. 'id' => '',
  88. 'store_id' => '',
  89. 'name' => '姓名',
  90. 'mobile' => '手机号',
  91. 'user_id' => '商城用户iD',
  92. 'team_grades_level' => '申请等级',
  93. 'total_price' => '累计分红金额',
  94. 'price' => '可提现分红金额',
  95. 'province_id' => '省ID',
  96. 'city_id' => '市ID',
  97. 'district_id' => '区ID',
  98. 'address' => '详细地址',
  99. 'is_delete' => '',
  100. 'created_at' => '',
  101. 'updated_at' => '',
  102. 'level_expires' => '等级有效期',
  103. 'level_expires_ext' => '等级有效期备注信息'
  104. ];
  105. }
  106. public function beforeSave($insert)
  107. {
  108. if (parent::beforeSave($insert)) {
  109. if ($insert) {
  110. $teamGrades = self::findOne(['user_id' => $this->user_id, 'is_delete' => 0]);
  111. if ($teamGrades) {
  112. $this->addError('user', '操作失败,用户已经存在');
  113. return false;
  114. }
  115. }
  116. return true;
  117. }
  118. return false;
  119. }
  120. public function afterSave($insert, $changedAttributes)
  121. {
  122. if (isset($changedAttributes['team_grades_level']) || $insert) {
  123. $teamGrades = self::findOne($this->id);
  124. $level = TeamGradesLevel::findOne(['level' => $teamGrades->team_grades_level, 'store_id' => $this->store_id, 'is_delete' => 0]);
  125. $result = self::handleUserLevelExpires($level, $teamGrades);
  126. $teamGrades->level_expires_ext = json_encode($result['level_expires_ext'], JSON_UNESCAPED_UNICODE);
  127. $teamGrades->level_expires = $result['expires_in'];
  128. $teamGrades->save();
  129. }
  130. parent::afterSave($insert, $changedAttributes); // TODO: Change the autogenerated stub
  131. }
  132. public static function getUserTeamGrades($user_id)
  133. {
  134. $team_grades = self::find()->where(['user_id' => $user_id, 'is_delete' => 0])
  135. ->select('id, user_id, store_id, name, mobile, team_grades_level, price, total_price')->asArray()->one();
  136. if (empty($team_grades)) {
  137. $store_id = User::findOne($user_id)->store_id;
  138. return [
  139. 'id' => 0,
  140. 'user_id' => $user_id,
  141. 'store_id' => $store_id,
  142. 'price' => 0,
  143. 'total_price' => 0,
  144. 'name' => '',
  145. 'mobile' => '',
  146. 'team_grades_level' => 0,
  147. 'team_grades_level_name' => '无等级',
  148. 'tiered_bonus' => 0,
  149. ];
  150. }
  151. $team_grades['team_grades_level_name'] = TeamGradesLevel::getLevelInfo($team_grades['team_grades_level'], $team_grades['store_id'], 'level_name') ?: '无等级';
  152. $team_grades['tiered_bonus'] = TeamGradesLevel::getLevelInfo($team_grades['team_grades_level'], $team_grades['store_id'], 'tiered_bonus') ?: 0;
  153. return $team_grades;
  154. }
  155. //处理团队等级有效期
  156. public static function handleUserLevelExpires($level, $teamGrades) {
  157. if (!$level || !$teamGrades) {
  158. return ['level_expires_ext' => [], 'expires_in' => 0];
  159. }
  160. // 会员等级新增有效期时间
  161. $expires_in = 0;
  162. //购买会员有限期 0为永久
  163. if ($level->expires_in > 0) {
  164. $expires_in = strtotime('+' . $level->expires_in . ' day');
  165. if ($level->expires_type) {
  166. $expires_in = strtotime('+' . $level->expires_in . ' month');//月
  167. }
  168. }
  169. $level_expires_ext = [['level' => $teamGrades->team_grades_level, 'expires_in' => $expires_in]];
  170. if ($teamGrades->level_expires_ext) {
  171. $level_expires_ext = json_decode($teamGrades->level_expires_ext, true);
  172. //给新的加上 排序(按等级) 并且 去除已经过期的 作为新的一个json
  173. array_push($level_expires_ext, ['level' => $teamGrades->team_grades_level, 'expires_in' => $expires_in]);
  174. //排序
  175. $last_names = array_column($level_expires_ext, 'level');
  176. array_multisort($last_names, SORT_DESC, $level_expires_ext);
  177. //去除已经过期的
  178. foreach ($level_expires_ext as $user_level_index => $user_level_item) {
  179. // 去除已经过期的
  180. if ($user_level_item['expires_in'] > 0 && $user_level_item['expires_in'] <= time()) {
  181. unset($level_expires_ext[$user_level_index]);
  182. }
  183. }
  184. $level_expires_ext = array_values($level_expires_ext);
  185. }
  186. return ['level_expires_ext' => $level_expires_ext, 'expires_in' => $expires_in];
  187. }
  188. }