DistributionMemberLogic.php 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  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\adminapi\logic\distribution;
  20. use app\common\enum\YesNoEnum;
  21. use app\common\logic\BaseLogic;
  22. use app\common\model\Distribution;
  23. use app\common\model\DistributionLevel;
  24. use app\common\model\DistributionOrderGoods;
  25. use app\common\model\OrderGoods;
  26. use app\common\model\User;
  27. /**
  28. * 分销会员逻辑层
  29. * Class DistributionMemberLogic
  30. * @package app\adminapi\logic\distribution
  31. */
  32. class DistributionMemberLogic extends BaseLogic
  33. {
  34. /**
  35. * @notes 开通分销
  36. * @param $params
  37. * @throws \Exception
  38. * @author Tab
  39. * @date 2021/7/27 17:49
  40. */
  41. public static function open($params)
  42. {
  43. try {
  44. $countIds = count($params['ids']);
  45. $countDistribution = Distribution::where('user_id', 'in', $params['ids'])->count();
  46. if ($countIds != $countDistribution) {
  47. throw new \Exception('存在不合法的ID');
  48. }
  49. $level = DistributionLevel::findOrEmpty($params['level_id']);
  50. if($level->isEmpty()) {
  51. throw new \Exception('无效的分销等级');
  52. }
  53. // 获取用户对应的distribution表id
  54. $distributionIds = Distribution::where('user_id', 'in', $params['ids'])->column('id', 'user_id');
  55. $updateData = [];
  56. $time = time();
  57. foreach($params['ids'] as $userId) {
  58. $updateData[] = [
  59. 'id' => $distributionIds[$userId],
  60. 'is_distribution' => YesNoEnum::YES,
  61. 'level_id' => $params['level_id'],
  62. 'distribution_time' => $time,
  63. ];
  64. }
  65. (new Distribution())->saveAll($updateData);
  66. return true;
  67. } catch(\Exception $e) {
  68. self::setError($e->getMessage());
  69. return false;
  70. }
  71. }
  72. public static function detail($params)
  73. {
  74. $field = [
  75. 'id' => 'distribution_id',
  76. 'user_id',
  77. 'level_id',
  78. 'is_distribution',
  79. 'is_freeze',
  80. 'distribution_time',
  81. ];
  82. $distribution = Distribution::field($field)
  83. ->where('user_id', $params['user_id'])
  84. ->findOrEmpty()
  85. ->toArray();
  86. // 分销等级
  87. $distribution['level_name'] = DistributionLevel::getLevelName($distribution['level_id']);
  88. // 已入账佣金
  89. $distribution['earningns'] = DistributionOrderGoods::getEarnings($distribution['user_id']);
  90. // 待结算佣金
  91. $distribution['unreturned_commission'] = DistributionOrderGoods::getUnReturnedCommission($distribution['user_id']);
  92. // 分销订单数量
  93. $orderGoodsIds = DistributionOrderGoods::where('user_id', $distribution['user_id'])->column('order_goods_id');
  94. $orderIds = OrderGoods::distinct(true)->where('id', 'in', $orderGoodsIds)->column('order_id');
  95. $distribution['distribution_order_num'] = count($orderIds);
  96. // 用户信息
  97. $distribution['user_info'] = User::field('id,sn,nickname,first_leader,user_delete,admin_update_leader')->findOrEmpty($distribution['user_id'])->toArray();
  98. // 上级分销商信息
  99. $distribution['first_leader_info'] = User::getFirstLeader($distribution['user_info'])['name'];
  100. // 下级人数
  101. $distribution['fans'] = User::getFans($distribution['user_id']);
  102. // 下级中有多少是分销商
  103. $distribution['fans_distribution'] = User::getFansDistribution($distribution['user_id']);
  104. // 下一级人数
  105. $distribution['fans_one'] = User::getLevelOneFans($distribution['user_id']);
  106. // 下一级中分销商人数
  107. $distribution['fans_one_distribution'] = User::getLevelOneFansDistribution($distribution['user_id']);
  108. // 下二级人数
  109. $distribution['fans_two'] = User::getLevelTwoFans($distribution['user_id']);
  110. // 下二级中分销商人数
  111. $distribution['fans_two_distribution'] = User::getLevelTwoFansDistribution($distribution['user_id']);
  112. return $distribution;
  113. }
  114. /**
  115. * @notes 调整分销等级界面信息
  116. * @param $params
  117. * @return array
  118. * @author Tab
  119. * @date 2021/9/14 18:50
  120. */
  121. public static function adjustLevelInfo($params)
  122. {
  123. $field = [
  124. 'u.sn',
  125. 'u.nickname',
  126. 'd.user_id',
  127. 'd.level_id'
  128. ];
  129. $user = Distribution::alias('d')
  130. ->leftJoin('user u', 'u.id = d.user_id')
  131. ->field($field)
  132. ->where('d.user_id', $params['user_id'])
  133. ->findOrEmpty()
  134. ->toArray();
  135. $user['level_name'] = DistributionLevel::getLevelName($user['level_id']);
  136. $levels = DistributionLevel::order('weights', 'asc')->column('id,name,weights');
  137. return [
  138. 'user' => $user,
  139. 'levels' => $levels
  140. ];
  141. }
  142. /**
  143. * @notes 调整分销商等级
  144. * @param $params
  145. * @author Tab
  146. * @date 2021/9/14 18:58
  147. */
  148. public static function adjustLevel($params)
  149. {
  150. try {
  151. $distribution = Distribution::where('user_id', $params['user_id'])->findOrEmpty();
  152. if ($distribution->isEmpty()) {
  153. throw new \Exception('分销商不存在');
  154. }
  155. $level = DistributionLevel::findOrEmpty($params['level_id']);
  156. if ($level->isEmpty()) {
  157. throw new \Exception('分销等级不存在');
  158. }
  159. $distribution->level_id = $params['level_id'];
  160. $distribution->save();
  161. return true;
  162. } catch (\Exception $e) {
  163. self::setError($e->getMessage());
  164. return false;
  165. }
  166. }
  167. /**
  168. * @notes 冻结/解冻资格
  169. * @param $params
  170. * @return bool
  171. * @author Tab
  172. * @date 2021/9/14 19:11
  173. */
  174. public static function freeze($params)
  175. {
  176. try {
  177. $distribution = Distribution::where('user_id', $params['user_id'])->findOrEmpty();
  178. if ($distribution->isEmpty()) {
  179. throw new \Exception('分销商不存在');
  180. }
  181. $distribution->is_freeze = !$distribution->is_freeze;
  182. $distribution->save();
  183. return true;
  184. } catch (\Exception $e) {
  185. self::setError($e->getMessage());
  186. return false;
  187. }
  188. }
  189. /**
  190. * @notes 查看下级
  191. * @param $params
  192. * @return array
  193. * @author Tab
  194. * @date 2021/9/14 19:25
  195. */
  196. public static function getFans($params)
  197. {
  198. $distribution['user_id'] = $params['user_id'];
  199. // 用户信息
  200. $distribution['user_info'] = User::field('id,sn,nickname,first_leader')->findOrEmpty($distribution['user_id'])->toArray();
  201. // 下级人数
  202. $distribution['fans'] = User::getFans($distribution['user_id']);
  203. // 下级中有多少是分销商
  204. $distribution['fans_distribution'] = User::getFansDistribution($distribution['user_id']);
  205. // 下一级人数
  206. $distribution['fans_one'] = User::getLevelOneFans($distribution['user_id']);
  207. // 下一级中分销商人数
  208. $distribution['fans_one_distribution'] = User::getLevelOneFansDistribution($distribution['user_id']);
  209. // 下二级人数
  210. $distribution['fans_two'] = User::getLevelTwoFans($distribution['user_id']);
  211. // 下二级中分销商人数
  212. $distribution['fans_two_distribution'] = User::getLevelTwoFansDistribution($distribution['user_id']);
  213. return $distribution;
  214. }
  215. }