DistributionValidate.php 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | likeshop100%开源免费商用商城系统
  4. // +----------------------------------------------------------------------
  5. // | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
  6. // | 开源版本可自由商用,可去除界面版权logo
  7. // | 商业版本务必购买商业授权,以免引起法律纠纷
  8. // | 禁止对系统程序代码以任何目的,任何形式的再发布
  9. // | gitee下载:https://gitee.com/likeshop_gitee
  10. // | github下载:https://github.com/likeshop-github
  11. // | 访问官网:https://www.likeshop.cn
  12. // | 访问社区:https://home.likeshop.cn
  13. // | 访问手册:http://doc.likeshop.cn
  14. // | 微信公众号:likeshop技术社区
  15. // | likeshop团队 版权所有 拥有最终解释权
  16. // +----------------------------------------------------------------------
  17. // | author: likeshopTeam
  18. // +----------------------------------------------------------------------
  19. namespace app\shopapi\validate;
  20. use app\adminapi\logic\config\UserLogic;
  21. use app\adminapi\logic\distribution\DistributionConfigLogic;
  22. use app\common\enum\DistributionApplyEnum;
  23. use app\common\enum\UserEnum;
  24. use app\common\model\User;
  25. use app\common\service\ConfigService;
  26. use app\common\validate\BaseValidate;
  27. use app\common\model\Distribution;
  28. use app\common\model\DistributionApply;
  29. /**
  30. * 分销验证器
  31. * Class DistributionValidate
  32. * @package app\shopapi\validate
  33. */
  34. class DistributionValidate extends BaseValidate
  35. {
  36. protected $rule = [
  37. 'code' => 'require|checkCode',
  38. 'user_id' => 'checkApply',
  39. 'real_name' => 'require',
  40. 'mobile' => 'require|mobile',
  41. 'province' => 'require|integer',
  42. 'city' => 'require|integer',
  43. 'district' => 'require|integer',
  44. 'reason' => 'require',
  45. ];
  46. protected $message = [
  47. 'code.require' => '请输入邀请码',
  48. 'real_name.require' => '请输入真实姓名',
  49. 'mobile.require' => '请输入手机号码',
  50. 'mobile.mobile' => '手机号码格式错误',
  51. 'province.require' => '请选择省份',
  52. 'province.integer' => '省份格式错误',
  53. 'city.require' => '请选择市',
  54. 'city.integer' => '市格式错误',
  55. 'district.require' => '请选择区',
  56. 'district.integer' => '区格式错误',
  57. 'reason.require' => '请输入申请原因',
  58. ];
  59. /**
  60. * @notes 填写验证码场景
  61. * @return DistributionValidate
  62. * @author Tab
  63. * @date 2021/7/17 10:19
  64. */
  65. public function sceneCode()
  66. {
  67. return $this->only(['code']);
  68. }
  69. /**
  70. * @notes 申请分销场景
  71. * @return DistributionValidate
  72. * @author Tab
  73. * @date 2021/7/17 10:18
  74. */
  75. public function sceneApply()
  76. {
  77. return $this->remove('code', 'require|checkCode')
  78. ->remove('terminal', 'require');
  79. }
  80. /**
  81. * @notes 校验邀请码
  82. * @param $code
  83. * @param $rule
  84. * @param $data
  85. * @return bool|string
  86. * @author Tab
  87. * @date 2021/7/16 17:50
  88. */
  89. public function checkCode($code, $rule, $data)
  90. {
  91. // 获取分销配置
  92. $distributionConfig = DistributionConfigLogic::getConfig();
  93. if(!$distributionConfig['switch']) {
  94. return '分销功能已关闭,无法绑定上下级';
  95. }
  96. $firstLeader = User::alias('u')
  97. ->leftJoin('distribution d', 'd.user_id = u.id')
  98. ->field('u.id,u.ancestor_relation,d.is_distribution,u.level,u.user_delete')
  99. ->where('u.code', $code)
  100. ->findOrEmpty();
  101. // 用户不存在 或者 已注销
  102. if($firstLeader->isEmpty() || $firstLeader->user_delete) {
  103. return '无效的邀请码';
  104. }
  105. $user = User::findOrEmpty($data['user_id']);
  106. if (empty($user->inviter_id) && $firstLeader->id != $data['user_id']) {
  107. // 记录邀请人(记录后不会再变更)
  108. $user->inviter_id = $firstLeader->id;
  109. $user->save();
  110. }
  111. if ($user->admin_update_leader) {
  112. return '后台已更改上级推荐人,不可变更';
  113. }
  114. $inviteOpen = ConfigService::get('config', 'invite_open', config('project.default_user.invite_open'));
  115. if(!$inviteOpen) {
  116. return '邀请下级功能已关闭';
  117. }
  118. $inviteCondition= ConfigService::get('config', 'invite_condition', config('project.default_user.invite_condition'));
  119. if($inviteCondition != UserEnum::INVITE_CONDITION_CODE) {
  120. return '不支持邀请码方式建立上下级关系';
  121. }
  122. if($user->first_leader) {
  123. return '已有上级';
  124. }
  125. if($firstLeader->id == $data['user_id']) {
  126. return '上级不能是自己';
  127. }
  128. $inviteWays = ConfigService::get('config', 'invite_ways', config('project.default_user.invite_ways'));
  129. $inviteAppointUser = ConfigService::get('config', 'invite_appoint_user', config('project.default_user.invite_appoint_user'));
  130. // 邀请类型指定会员,邀请人没达到指定的等级
  131. if($inviteWays == 2 && !in_array($firstLeader['level'], $inviteAppointUser) && !$firstLeader['is_distribution']) {
  132. return '邀请下级资格未达到要求';
  133. }
  134. $ancestorRelation =explode(',', $firstLeader['ancestor_relation']);
  135. if(!empty($ancestorRelation) && in_array($data['user_id'], $ancestorRelation)) {
  136. return '不允许填写自己任一下级的邀请码';
  137. }
  138. return true;
  139. }
  140. /**
  141. * @notes 校验是否重复提交申请
  142. * @param $user_id
  143. * @return string
  144. * @author Tab
  145. * @date 2021/7/17 10:51
  146. */
  147. public function checkApply($user_id)
  148. {
  149. $is_distribution = Distribution::where('user_id', $user_id)->value('is_distribution');
  150. if($is_distribution) {
  151. return '您已是分销会员,无需申请';
  152. }
  153. $distributionApply = DistributionApply::where('user_id', $user_id)->findOrEmpty();
  154. if(!$distributionApply->isEmpty() && $distributionApply->status == DistributionApplyEnum::AUDIT_WAIT) {
  155. return '审核中,请勿重复提交申请';
  156. }
  157. return true;
  158. }
  159. }