ServeBonus.php 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. <?php
  2. namespace addons\ServeBonus\common\models;
  3. use addons\ServeBonus\common\enums\LevelEnum;
  4. use addons\ServeBonus\common\enums\ServeBonusEnum;
  5. use common\enums\StatusEnum;
  6. use common\models\common\Addons;
  7. use common\models\mall\MallAddons;
  8. use common\models\user\User;
  9. use Yii;
  10. use yii\db\Exception;
  11. /**
  12. * This is the model class for table "qimall_addons_servebonus".
  13. *
  14. * @property int $id
  15. * @property int $mall_id 商城ID
  16. * @property int $user_id 用户ID
  17. * @property int $level 服务商等级
  18. * @property float $commission 累计出单奖励佣金,单位:元
  19. * @property float $extra_commission 累计加权平分佣金,单位:元
  20. * @property float $temp_extra_commission 加权平分金额,主要用于判断是否会导致超额
  21. * @property float $total_commission 累计总佣金,单位:元
  22. * @property int $upgrade_status 1条件升级,2购买指定商品升级,3手动升级
  23. * @property int $upgrade_level_at 股东等级升级时间
  24. * @property int $period_num 已分红期数
  25. * @property int|null $status 状态[-1:删除;0:禁用;1启用]
  26. * @property int $created_at 创建时间
  27. * @property int $updated_at 修改时间
  28. */
  29. class ServeBonus extends \common\models\base\BaseActiveRecord
  30. {
  31. /**
  32. * {@inheritdoc}
  33. */
  34. public static function tableName()
  35. {
  36. return '{{%addons_servebonus}}';
  37. }
  38. /**
  39. * {@inheritdoc}
  40. */
  41. public function rules()
  42. {
  43. return [
  44. [['mall_id', 'user_id', 'level', 'upgrade_status', 'upgrade_level_at', 'period_num', 'status', 'created_at', 'updated_at'], 'integer'],
  45. [['commission', 'extra_commission', 'temp_extra_commission', 'total_commission'], 'number'],
  46. ];
  47. }
  48. /**
  49. * {@inheritdoc}
  50. */
  51. public function attributeLabels()
  52. {
  53. return [
  54. 'id' => 'ID',
  55. 'mall_id' => '商城ID',
  56. 'user_id' => '用户ID',
  57. 'level' => '服务商等级',
  58. 'commission' => '累计出单奖励佣金,单位:元',
  59. 'extra_commission' => '累计加权平分佣金,单位:元',
  60. 'temp_extra_commission' => '加权平分金额,主要用于判断是否会导致超额',
  61. 'total_commission' => '累计总佣金,单位:元',
  62. 'upgrade_status' => '1条件升级,2购买指定商品升级,3手动升级',
  63. 'upgrade_level_at' => '股东等级升级时间',
  64. 'period_num' => '已分红期数',
  65. 'status' => '状态[-1:删除;0:禁用;1启用]',
  66. 'created_at' => '创建时间',
  67. 'updated_at' => '修改时间',
  68. ];
  69. }
  70. public function getUser()
  71. {
  72. return $this->hasOne(User::class, ['id' => 'user_id'])->select('id,mobile,nickname,avatar_url,parent_id');
  73. }
  74. /**
  75. * @desc:关联服务商等级
  76. * @Author: hua
  77. * @Date: 2021/11/5
  78. * @Time: 10:04
  79. * @Copyright: copyright (c) 2021 广东七件事集团
  80. * @return \yii\db\ActiveQuery
  81. */
  82. public function getServeBonusLevel(){
  83. return $this->hasOne(ServeBonusLevel::class, ['level' => 'level'])->andWhere(['<>','status',StatusEnum::DELETE]);
  84. }
  85. /**
  86. * @Author: ltm
  87. * @DateTime: 2022/2/11 0011 10:58
  88. * @Copyright: copyright (c) 2021 广东七件事集团
  89. * @param $data
  90. * @return string
  91. */
  92. public function beforeSave($insert){
  93. $old_level = $this->getOldAttribute('level');
  94. if($this->level != $old_level){
  95. if(!$old_level){ //添加
  96. $level['level'] = $this->level;
  97. $level['num'] = 1;
  98. ServeBonusLevel::statisticsServeBonus($level,[],$this->mall_id);
  99. }else{
  100. if($this->level){ //编辑的时候和升级的时候
  101. $level['level'] = $this->level;
  102. $level['num'] = 1;
  103. $last_level['level'] = $old_level;
  104. $last_level['num'] = 1;
  105. ServeBonusLevel::statisticsServeBonus($level,$last_level,$this->mall_id);
  106. }
  107. }
  108. }else if($this->status == StatusEnum::DELETE){ //删除的时候统计
  109. $last_level['level'] = $old_level;
  110. $last_level['num'] = 1;
  111. ServeBonusLevel::statisticsServeBonus('',$last_level,$this->mall_id);
  112. }
  113. return parent::beforeSave($insert);
  114. }
  115. /**
  116. * 保存数据
  117. * @Author: ltm
  118. * @DateTime: 2021/10/22 0022 17:13
  119. * @Copyright: copyright (c) 2021 广东七件事集团
  120. * @param array $params
  121. * @return ServeBonus|bool
  122. */
  123. public static function setData(array $params){
  124. try{
  125. if(!empty($params['user_id'])){
  126. $model = self::findOne(['user_id' => $params['user_id'],'mall_id' => $params['mall_id'], 'status' => StatusEnum::ENABLED]);
  127. if(empty($model)) {
  128. $model = new self();
  129. $model->loadDefaultValues();
  130. $model->mall_id = $params['mall_id'];
  131. $model->upgrade_status = LevelEnum::UPGRADE_MANUAL;
  132. $model->upgrade_level_at = time();
  133. }
  134. } else {
  135. throw new \Exception('服务商数据不存在或已删除');
  136. }
  137. if(!$model->load($params,'') || !$model->save()){
  138. throw new Exception($model->getErrorMessage());
  139. }
  140. return $model;
  141. }catch(\Exception $e){
  142. self::setStaticError($e->getMessage());
  143. return false;
  144. }
  145. }
  146. /**
  147. * 获取服务商列表
  148. * @Author: ltm
  149. * @DateTime: 2021/10/25 0025 10:05
  150. * @Copyright: copyright (c) 2021 广东七件事集团
  151. * @param array $cond
  152. * @param array $with
  153. * @param bool $is_array
  154. * @param string $select
  155. * @return array|\yii\db\ActiveRecord[]
  156. */
  157. public static function getServeBonus(array $cond=[], array $with=[],bool $is_array=true,string $select='*'){
  158. $default_cond = [['<>','status',StatusEnum::DELETE]];
  159. $cond = array_merge($default_cond,$cond);
  160. $query = self::find()->select($select);
  161. self::paramPack(['where'=>$cond, 'with'=>$with],$query);
  162. $data = $query->asArray($is_array)->all();
  163. return $data;
  164. }
  165. /**
  166. * @desc:推广中心-调用
  167. * @Author: hua
  168. * @Date: 2021/11/12
  169. * @Time: 9:30
  170. * @Copyright: copyright (c) 2021 广东七件事集团
  171. * @param $params ['user_id' => 1, 'mall_id' => 5, 'addons_name' => 'Agent']
  172. * @return array
  173. */
  174. public static function getIncomeInfo(array $params){
  175. $is_install = MallAddons::isInstall($params['mall_id'], $params['addons_name']);
  176. $data['total_commission'] = 0;
  177. $data['is_install'] = 0;
  178. $basic = \Yii::$app->services->setting->addons->get($params['mall_id'], $params['addons_name'], 'basic');
  179. $data['is_show_at_center'] = 1;
  180. if(isset($basic['is_show_at_center'])) $data['is_show_at_center'] = $basic['is_show_at_center'];
  181. if($is_install){
  182. $model = self::findOne(['user_id'=>$params['user_id']]);
  183. $data['total_commission'] = $model['total_commission']??0;
  184. $data['is_install'] = $is_install;
  185. }
  186. return $data;
  187. }
  188. public static function getAddons(array $params){
  189. $addons_name = $params['addons_name'];
  190. $is_install = MallAddons::isInstall($params['mall_id'], $addons_name);
  191. if($is_install){
  192. $detail = Addons::getOne([['name' =>$addons_name], ['is_online' => 1]], true,);
  193. return [
  194. 'addons_name'=>$addons_name,
  195. 'title'=>$detail['title'],
  196. ];
  197. }
  198. return [];
  199. }
  200. }