Bind.php 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. <?php
  2. /**
  3. * 重庆赤晓店信息科技有限公司
  4. * https://www.chixiaodian.com
  5. * Copyright (c) 2023 赤店商城 All rights reserved.
  6. */
  7. namespace app\models\common;
  8. use app\models\AccountLog;
  9. use app\models\Option;
  10. use app\models\Register;
  11. use app\models\Share;
  12. use app\models\User;
  13. use yii\base\Model;
  14. use yii\helpers\Json;
  15. class Bind extends Model
  16. {
  17. public $store_id;
  18. public $user_id;
  19. public $parent_id;
  20. public $condition;
  21. public function rules()
  22. {
  23. return [
  24. [['parent_id', 'user_id', 'store_id', 'condition'], 'integer'],
  25. ];
  26. }
  27. /**
  28. * @return array
  29. * 绑定上下级关系
  30. */
  31. public function save()
  32. {
  33. $setting = Option::get('share_basic_setting', get_store_id());
  34. $setting = $setting ? Json::decode($setting['value']) : [];
  35. //店铺未开启分销
  36. if ($setting['level']['value'] == 0) {
  37. \Yii::warning('未开启分销');
  38. return [
  39. 'code' => 1,
  40. 'msg' => '未开启分销'
  41. ];
  42. }
  43. // 成为下线条件 0--首次点击分享链接 1--首次下单 2--首次付款
  44. if ($setting['condition']['value'] !== $this->condition) {
  45. \Yii::warning('未满足成为下线条件');
  46. return [
  47. 'code' => 1,
  48. 'msg' => '未满足成为下线条件'
  49. ];
  50. }
  51. //自身分享的页面
  52. if ($this->user_id == $this->parent_id) {
  53. \Yii::warning('自身分销的页面');
  54. return [
  55. 'code' => 1,
  56. 'msg' => '自身分销的页面'
  57. ];
  58. }
  59. //父级id是否是分销商
  60. $exit = Share::find()->andWhere(['user_id' => $this->parent_id, 'store_id' => $this->store_id, 'is_delete' => 0,
  61. 'status' => 1])->exists();
  62. if (!$exit) {
  63. \Yii::warning('不是分销商');
  64. return [
  65. 'code' => 1,
  66. 'msg' => '不是分销商'
  67. ];
  68. }
  69. //判断父级id是否在三级分销链中
  70. $res = self::check($this->user_id, $this->parent_id, 0);
  71. if ($res['code'] == 1) {
  72. \Yii::warning('父级id不存在三级分销链中');
  73. return [
  74. 'code' => 1,
  75. 'msg' => '父级id是否在三级分销链中'
  76. ];
  77. }
  78. $user = User::findOne(['id' => $this->user_id, 'is_delete' => 0]);
  79. $parent = User::findOne(['id' => $this->parent_id, 'is_delete' => 0]);
  80. if ($parent->is_distributor != 1) {
  81. \Yii::warning('父级不是分销商');
  82. return [
  83. 'code' => 1,
  84. 'msg' => '父级不是分销商'
  85. ];
  86. }
  87. //用户是否是分销商
  88. if ($user->is_distributor == 1) {
  89. \Yii::warning('用户不是分销商');
  90. return [
  91. 'code' => 1,
  92. 'msg' => '用户不是分销商'
  93. ];
  94. }
  95. //用户是否存在父级
  96. if ($user->parent_id != 0 || $user->old_parent_id != 0) {
  97. \Yii::warning('用户存在存在父级');
  98. return [
  99. 'code' => 1,
  100. 'msg' => '用户存在存在父级'
  101. ];
  102. }
  103. $user->parent_id = $this->parent_id;
  104. $user->old_parent_id = $this->parent_id;
  105. if ($user->save()) {
  106. // 推荐送积分
  107. if ($setting['d_rec_member_integral']['value'] > 0) {
  108. $before = $user->integral;
  109. $user->integral += $setting['d_rec_member_integral']['value'];
  110. $user->save();
  111. $register = new Register();
  112. $register->store_id = get_store_id();
  113. $register->user_id = $user->id;
  114. $register->register_time = "$this->parent_id";// 推荐人
  115. $register->created_at = time();
  116. $register->continuation = 0;
  117. $register->type = 31;
  118. $register->integral = $setting['d_rec_member_integral']['value'];
  119. $register->order_id = 0;
  120. $register->save();
  121. $log = new AccountLog();
  122. $log->store_id = get_store_id();
  123. $log->user_id = $user->id;
  124. $log->type = AccountLog::TYPE_INTEGRAL;
  125. $log->amount = $setting['d_rec_member_integral']['value'];
  126. $log->desc = "被推荐会员赠送积分";
  127. $log->before = $before;
  128. $log->after = $user->integral;
  129. $log->log_type = AccountLog::LOG_TYPE_INCOME;
  130. $log->operator = 'system';
  131. $log->operator_id = 0;
  132. $log->operator_type = AccountLog::TYPE_OPERATOR_NORMAL;
  133. $log->created_at = time();
  134. $log->order_id = 0;
  135. $log->order_type = 0;
  136. $log->save();
  137. }
  138. if ($setting['rec_member_integral']['value'] > 0) {
  139. $parent_info = User::findOne($this->parent_id);
  140. $before = $parent_info->integral;
  141. $parent_info->integral += $setting['rec_member_integral']['value'];
  142. $parent_info->save();
  143. $register = new Register();
  144. $register->store_id = get_store_id();
  145. $register->user_id = $user->id;
  146. $register->register_time = "$this->parent_id";// 推荐人
  147. $register->created_at = time();
  148. $register->continuation = 0;
  149. $register->type = 31;
  150. $register->integral = $setting['rec_member_integral']['value'];
  151. $register->order_id = 0;
  152. $register->save();
  153. $log = new AccountLog();
  154. $log->store_id = get_store_id();
  155. $log->user_id = $user->id;
  156. $log->type = AccountLog::TYPE_INTEGRAL;
  157. $log->amount = $setting['rec_member_integral']['value'];
  158. $log->desc = "推荐会员赠送积分";
  159. $log->before = $before;
  160. $log->after = $user->integral;
  161. $log->log_type = AccountLog::LOG_TYPE_INCOME;
  162. $log->operator = 'system';
  163. $log->operator_id = 0;
  164. $log->operator_type = AccountLog::TYPE_OPERATOR_NORMAL;
  165. $log->created_at = time();
  166. $log->order_id = 0;
  167. $log->order_type = 0;
  168. $log->save();
  169. }
  170. return [
  171. 'code' => 0,
  172. 'msg' => '成功',
  173. 'data' => $parent->nickname
  174. ];
  175. } else {
  176. return [
  177. 'code' => 1,
  178. 'msg' => '网络异常'
  179. ];
  180. }
  181. }
  182. public static function check($user_id, $parent_id, $root = 0)
  183. {
  184. if ($root == 3) {
  185. return [
  186. 'code' => 0,
  187. 'msg' => '可以绑定'
  188. ];
  189. }
  190. if ($parent_id == 0) {
  191. return [
  192. 'code' => 0,
  193. 'msg' => '可以绑定'
  194. ];
  195. }
  196. $user = User::findOne(['id' => $parent_id, 'is_delete' => 0]);
  197. if ($user_id == $user->parent_id) {
  198. return [
  199. 'code' => 1,
  200. 'msg' => '不能'
  201. ];
  202. }
  203. return self::check($user_id, $user->parent_id, $root + 1);
  204. }
  205. }