Broker.php 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. <?php
  2. namespace app\subscribe;
  3. use app\common\model\User;
  4. use app\common\model\UserPart;
  5. use app\common\model\Broker as BrokerModel;
  6. use think\Event;
  7. class Broker
  8. {
  9. /**
  10. * 经纪人添加后事件
  11. */
  12. public function onBrokerAdd($broker)
  13. {
  14. $part = UserPart::where('userid', $broker['userid'])->find();
  15. //判断是否有上级
  16. if (!empty($part)) {
  17. //有上级时判断是否有上级里有经纪人
  18. $user = User::where('id', $broker['userid'])->find();
  19. if (!empty($user['brokerid'])) {
  20. //上级有经纪人判断是否相同门店
  21. $upper_broker = BrokerModel::where('id', $user['brokerid'])->find();
  22. if ($upper_broker['agentid'] == $broker['agentid']) {
  23. //相同门店将下级的经纪人更改为自己
  24. $this->setNextId($broker['userid'], $broker['id']);
  25. } else {
  26. //不同门店将自己的下级都转给上级经纪人
  27. User::where('id', $broker['userid'])->update(['brokerid' => $broker['id']]);
  28. UserPart::where('puserid', $broker['userid'])->update(['puserid' => $upper_broker['userid']]);
  29. }
  30. } else {
  31. //上级没有经纪人时将下级的经纪人更改为自己
  32. $this->setNextId($broker['userid'], $broker['id']);
  33. }
  34. } else {
  35. //无上级将下级的经纪人更改为自己
  36. $this->setNextId($broker['userid'], $broker['id']);
  37. }
  38. //成为经纪人删除上级关系
  39. UserPart::where('userid', $broker['userid'])->delete();
  40. }
  41. /**
  42. * 设置下级关系
  43. * @param int $user_id 需要变更下级人的id
  44. * @param int $broker_id 需要把这些人变为哪个经纪人的id
  45. * @param int $new_user_id 需要把这些人变为哪个上级的id,不传表示不变
  46. */
  47. private function setNextId($user_id, $broker_id)
  48. {
  49. $user_ids = $this->_getNextId($user_id);
  50. $user_ids[] = $user_id;
  51. User::where('id', 'in', $user_ids)->update(['brokerid' => $broker_id]);
  52. }
  53. /**
  54. * 获取下级id
  55. */
  56. private function _getNextId($user_id)
  57. {
  58. if (!is_array($user_id)) {
  59. $user_id = [$user_id];
  60. }
  61. $userIds = UserPart::where('puserid', 'in', $user_id)->column('userid');
  62. if (!empty($userIds)) {
  63. return array_merge($this->_getNextId($userIds), $userIds);
  64. } else {
  65. return $userIds;
  66. }
  67. }
  68. /**
  69. * 自定义订阅列表
  70. */
  71. public function subscribe(Event $event)
  72. {
  73. $event->listen('brokerAdd', [$this, 'onBrokerAdd']);
  74. }
  75. }