DivisionServices.php 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680
  1. <?php
  2. namespace app\services\agent;
  3. use app\services\BaseServices;
  4. use app\services\other\QrcodeServices;
  5. use app\services\system\admin\SystemAdminServices;
  6. use app\services\system\admin\SystemRoleServices;
  7. use app\services\user\UserServices;
  8. use crmeb\exceptions\AdminException;
  9. use crmeb\exceptions\ApiException;
  10. use crmeb\services\FormBuilder as Form;
  11. use think\db\exception\DataNotFoundException;
  12. use think\db\exception\DbException;
  13. use think\db\exception\ModelNotFoundException;
  14. use think\facade\Route;
  15. class DivisionServices extends BaseServices
  16. {
  17. /**
  18. * 获取事业部/代理/员工列表
  19. * @param array $where
  20. * @return array
  21. * @throws \think\db\exception\DataNotFoundException
  22. * @throws \think\db\exception\DbException
  23. * @throws \think\db\exception\ModelNotFoundException
  24. */
  25. public function getDivisionList(array $where = [])
  26. {
  27. /** @var UserServices $userServices */
  28. $userServices = app()->make(UserServices::class);
  29. $data = $userServices->getDivisionList($where + ['status' => 1], 'uid,nickname,avatar,division_name,division_percent,division_end_time,division_status,division_invite');
  30. foreach ($data['list'] as &$item) {
  31. $item['division_end_time'] = date('Y-m-d', $item['division_end_time']);
  32. $item['agent_count'] = $userServices->count([
  33. $where['division_type'] == 1 ? 'division_id' : 'agent_id' => $item['uid'],
  34. 'division_type' => $where['division_type'] + 1,
  35. 'status' => 1,
  36. 'is_del' => 0
  37. ]);
  38. unset($item['label']);
  39. }
  40. return $data;
  41. }
  42. /**
  43. * 下级列表
  44. * @param $type
  45. * @param $uid
  46. * @return array
  47. * @throws \think\db\exception\DataNotFoundException
  48. * @throws \think\db\exception\DbException
  49. * @throws \think\db\exception\ModelNotFoundException
  50. */
  51. public function divisionDownList($type, $uid)
  52. {
  53. /** @var UserServices $userServices */
  54. $userServices = app()->make(UserServices::class);
  55. $where = [
  56. $type == 2 ? 'division_id' : 'agent_id' => $uid,
  57. 'division_type' => $type
  58. ];
  59. $where['status'] = 1;
  60. $where['is_del'] = 0;
  61. $data = $userServices->getDivisionList($where, 'uid,nickname,avatar,division_name,division_percent,division_end_time,division_status');
  62. foreach ($data['list'] as &$item) {
  63. $item['agent_count'] = $userServices->count([
  64. 'agent_id' => $item['uid'],
  65. 'division_type' => $type + 1,
  66. 'status' => 1
  67. ]);
  68. unset($item['label']);
  69. }
  70. return $data;
  71. }
  72. /**
  73. * 添加编辑事业部表单
  74. * @param $uid
  75. * @return array
  76. * @throws \FormBuilder\Exception\FormBuilderException
  77. */
  78. public function getDivisionForm($uid)
  79. {
  80. /** @var UserServices $userServices */
  81. $userServices = app()->make(UserServices::class);
  82. /** @var SystemAdminServices $adminService */
  83. $adminService = app()->make(SystemAdminServices::class);
  84. $userInfo = $userServices->getUserInfo($uid);
  85. if ($uid && !$userInfo) throw new AdminException(100100);
  86. if ($uid) {
  87. $adminInfo = $adminService->getInfo(['division_id' => $uid])->toArray();
  88. if (isset($adminInfo['roles'])) {
  89. foreach ($adminInfo['roles'] as &$item) {
  90. $item = intval($item);
  91. }
  92. }
  93. }
  94. $field = [];
  95. $title = '事业部';
  96. $field[] = Form::input('division_name', '事业部名称', $userInfo['division_name'] ?? '')->required('请输入事业部名称');
  97. if ($uid) {
  98. $field[] = Form::hidden('uid', $uid);
  99. } else {
  100. $field[] = Form::frameImage('image', '关联用户', $this->url(config('app.admin_prefix', 'admin') . '/system.user/list', ['fodder' => 'image'], true))->icon('el-icon-user')->width('950px')->height('560px')->Props(['srcKey' => 'image', 'footer' => false]);
  101. }
  102. $field[] = Form::hidden('aid', $adminInfo['id'] ?? 0);
  103. $field[] = Form::number('division_percent', '佣金比例', $userInfo['division_percent'] ?? '')->placeholder('区域代理佣金比例1-100')->info('填写1-100,如填写50代表返佣50%')->style(['width' => '173px'])->min(0)->max(100)->required();
  104. $field[] = Form::date('division_end_time', '到期时间', ($userInfo['division_end_time'] ?? '') != 0 ? date('Y-m-d H:i:s', $userInfo['division_end_time']) : '')->placeholder('区域代理到期时间');
  105. $field[] = Form::radio('division_status', '代理状态', $userInfo['division_status'] ?? 1)->options([['label' => '开通', 'value' => 1], ['label' => '关闭', 'value' => 0]]);
  106. $field[] = Form::input('account', '管理账号', $adminInfo['account'] ?? '')->required('请填写管理员账号');
  107. $field[] = Form::input('pwd', '管理密码')->type('password')->placeholder('请填写管理员密码');
  108. $field[] = Form::input('conf_pwd', '确认密码')->type('password')->placeholder('请输入确认密码');
  109. /** @var SystemRoleServices $service */
  110. $service = app()->make(SystemRoleServices::class);
  111. $options = $service->getRoleFormSelect(1);
  112. $field[] = Form::select('roles', '管理员身份', $adminInfo['roles'] ?? [])->setOptions(Form::setOptions($options))->multiple(true)->required('请选择管理员身份');
  113. return create_form($title, $field, Route::buildUrl('/agent/division/save'), 'POST');
  114. }
  115. /**
  116. * 保存事业部数据
  117. * @param $data
  118. * @return mixed
  119. */
  120. public function divisionSave($data)
  121. {
  122. if ((int)$data['uid'] == 0) $data['uid'] = $data['image']['uid'];
  123. if ((int)$data['uid'] == 0) throw new AdminException(400450);
  124. /** @var UserServices $userServices */
  125. $userServices = app()->make(UserServices::class);
  126. if ($data['aid'] == 0) {
  127. $userInfo = $userServices->getUserInfo($data['uid'], 'is_division,is_agent,is_staff');
  128. if (!$userInfo) throw new AdminException('用户不存在');
  129. if ($userInfo['is_division']) throw new AdminException('此用户是事业部,请勿重复添加');
  130. if ($userInfo['is_agent']) throw new AdminException('此用户是代理商,无法添加为事业部');
  131. if ($userInfo['is_staff']) throw new AdminException('此用户是下级员工,无法添加为事业部');
  132. }
  133. $uid = $data['uid'];
  134. $aid = $data['aid'];
  135. $agentData = [
  136. 'division_percent' => $data['division_percent'],
  137. 'division_end_time' => strtotime($data['division_end_time']),
  138. 'division_change_time' => time(),
  139. 'is_division' => 1,
  140. 'is_agent' => 0,
  141. 'is_staff' => 0,
  142. 'division_id' => $uid,
  143. 'agent_id' => 0,
  144. 'staff_id' => 0,
  145. 'division_type' => 1,
  146. 'division_status' => $data['division_status'],
  147. 'spread_uid' => 0,
  148. 'spread_time' => 0,
  149. 'division_name' => $data['division_name']
  150. ];
  151. $adminData = [
  152. 'account' => $data['account'],
  153. 'pwd' => $data['pwd'],
  154. 'conf_pwd' => $data['conf_pwd'],
  155. 'real_name' => $data['division_name'],
  156. 'roles' => $data['roles'],
  157. 'status' => 1,
  158. 'level' => 1,
  159. 'division_id' => $uid
  160. ];
  161. return $this->transaction(function () use ($uid, $agentData, $adminData, $aid, $userServices) {
  162. $agentData['division_invite'] = $userServices->value(['uid' => $uid], 'division_invite') ?: rand(10000000, 99999999);
  163. $userServices->update($uid, $agentData);
  164. /** @var SystemAdminServices $adminService */
  165. $adminService = app()->make(SystemAdminServices::class);
  166. if (!$aid) {
  167. if ($adminData['pwd']) {
  168. if (!$adminData['conf_pwd']) throw new AdminException(400263);
  169. if ($adminData['pwd'] != $adminData['conf_pwd']) throw new AdminException(400264);
  170. $adminService->create($adminData);
  171. } else {
  172. throw new AdminException(400263);
  173. }
  174. } else {
  175. $adminInfo = $adminService->get($aid);
  176. if (!$adminInfo)
  177. throw new AdminException(400451);
  178. if ($adminInfo->is_del) {
  179. throw new AdminException(400452);
  180. }
  181. if (!$adminData['real_name'])
  182. throw new AdminException(400453);
  183. if ($adminData['pwd']) {
  184. if (!$adminData['conf_pwd']) throw new AdminException(400263);
  185. if ($adminData['pwd'] != $adminData['conf_pwd']) throw new AdminException(400264);
  186. $adminInfo->pwd = $this->passwordHash($adminData['pwd']);
  187. }
  188. $adminInfo->real_name = $adminData['real_name'];
  189. $adminInfo->account = $adminData['account'];
  190. $adminInfo->roles = implode(',', $adminData['roles']);
  191. if ($adminInfo->save())
  192. return true;
  193. else
  194. return false;
  195. }
  196. return true;
  197. });
  198. }
  199. // /**
  200. // * 生成邀请码
  201. // * @return false|string
  202. // */
  203. // public function getDivisionInvite()
  204. // {
  205. // /** @var UserServices $userServices */
  206. // $userServices = app()->make(UserServices::class);
  207. // list($msec, $sec) = explode(' ', microtime());
  208. // $num = time() + mt_rand(10, 999999) . '' . substr($msec, 2, 3);//生成随机数
  209. // if (strlen($num) < 12)
  210. // $num = str_pad((string)$num, 8, 0, STR_PAD_RIGHT);
  211. // else
  212. // $num = substr($num, 0, 8);
  213. // if ($userServices->count(['division_invite' => $num])) {
  214. // return $this->getDivisionInvite();
  215. // }
  216. // return $num;
  217. // }
  218. /**
  219. * 添加编辑代理商
  220. * @param $uid
  221. * @return array
  222. * @throws \FormBuilder\Exception\FormBuilderException
  223. */
  224. public function getDivisionAgentForm($uid)
  225. {
  226. /** @var UserServices $userService */
  227. $userService = app()->make(UserServices::class);
  228. $userInfo = $userService->get($uid);
  229. if ($uid && !$userInfo) throw new AdminException(400214);
  230. $field = [];
  231. $options = [];
  232. $divisionList = $userService->getDivisionList(['status' => 1, 'division_type' => 1], 'uid,division_name');
  233. foreach ($divisionList['list'] as $item) {
  234. $options[] = ['value' => $item['uid'], 'label' => $item['division_name']];
  235. }
  236. $field[] = Form::input('division_name', '代理商名称', $userInfo['division_name'] ?? '')->required('请输入代理商名称');
  237. if ($uid) {
  238. $field[] = Form::hidden('uid', $uid);
  239. $field[] = Form::hidden('edit', 1);
  240. } else {
  241. $field[] = Form::select('division_id', '上级事业部', $info['file_name'] ?? '')->setOptions(Form::setOptions($options))->filterable(1);
  242. $field[] = Form::frameImage('image', '关联用户', $this->url(config('app.admin_prefix', 'admin') . '/system.user/list', ['fodder' => 'image'], true))->icon('el-icon-user')->width('950px')->height('560px')->Props(['srcKey' => 'image', 'footer' => false]);
  243. $field[] = Form::hidden('edit', 0);
  244. }
  245. $field[] = Form::number('division_percent', '佣金比例', $userInfo['division_percent'] ?? '')->placeholder('代理商佣金比例1-100')->info('填写1-100,如填写50代表返佣50%,但是不能高于上级事业部的比例')->style(['width' => '173px'])->min(0)->max(100)->required();
  246. $field[] = Form::date('division_end_time', '到期时间', ($userInfo['division_end_time'] ?? '') != 0 ? date('Y-m-d H:i:s', $userInfo['division_end_time']) : '')->placeholder('代理商代理到期时间');
  247. $field[] = Form::radio('division_status', '代理状态', $userInfo['division_status'] ?? 1)->options([['label' => '开通', 'value' => 1], ['label' => '关闭', 'value' => 0]]);
  248. return create_form('代理商', $field, Route::buildUrl('/agent/division/agent/save'), 'POST');
  249. }
  250. /**
  251. * 保存代理商
  252. * @param $data
  253. * @return bool
  254. * @throws \think\db\exception\DataNotFoundException
  255. * @throws \think\db\exception\DbException
  256. * @throws \think\db\exception\ModelNotFoundException
  257. */
  258. public function divisionAgentSave($data)
  259. {
  260. /** @var UserServices $userServices */
  261. $userServices = app()->make(UserServices::class);
  262. $uid = $data['uid'];
  263. $agentData = [
  264. 'spread_uid' => $data['division_id'],
  265. 'spread_time' => time(),
  266. 'division_id' => $data['division_id'],
  267. 'division_status' => $data['division_status'],
  268. 'division_percent' => $data['division_percent'],
  269. 'division_change_time' => time(),
  270. 'division_end_time' => strtotime($data['division_end_time']),
  271. 'division_type' => 2,
  272. 'is_agent' => 1,
  273. 'agent_id' => $uid,
  274. 'is_staff' => 0,
  275. 'staff_id' => 0,
  276. 'division_name' => $data['division_name'],
  277. ];
  278. $division_info = $userServices->getUserInfo($data['division_id'], 'division_end_time,division_percent');
  279. if ($division_info) {
  280. if ($agentData['division_percent'] > $division_info['division_percent']) throw new AdminException(400448);
  281. if ($agentData['division_end_time'] > $division_info['division_end_time']) throw new AdminException(400449);
  282. }
  283. $res = $userServices->update($uid, $agentData);
  284. if ($res) return true;
  285. throw new AdminException('保存失败');
  286. }
  287. /**
  288. * 修改状态
  289. * @param $status
  290. * @param $uid
  291. * @return bool
  292. */
  293. public function setDivisionStatus($status, $uid)
  294. {
  295. /** @var UserServices $userServices */
  296. $userServices = app()->make(UserServices::class);
  297. /** @var SystemAdminServices $adminServices */
  298. $adminServices = app()->make(SystemAdminServices::class);
  299. $res = $userServices->update($uid, ['division_status' => $status]);
  300. $res = $res && $adminServices->update(['division_id' => $uid], ['status' => $status]);
  301. if ($res) {
  302. return true;
  303. } else {
  304. throw new AdminException(100005);
  305. }
  306. }
  307. /**
  308. * 删除事业部/代理商
  309. * @param $type
  310. * @param $uid
  311. * @return mixed
  312. */
  313. public function delDivision($type, $uid)
  314. {
  315. return $this->transaction(function () use ($type, $uid) {
  316. /** @var UserServices $userServices */
  317. $userServices = app()->make(UserServices::class);
  318. switch ($type) {
  319. case 1:
  320. /** @var SystemAdminServices $adminService */
  321. $adminService = app()->make(SystemAdminServices::class);
  322. $adminService->delete(['division_id' => $uid]);
  323. break;
  324. }
  325. $data = [
  326. 'division_type' => 0,
  327. 'division_status' => 0,
  328. 'is_division' => 0,
  329. 'division_id' => 0,
  330. 'is_agent' => 0,
  331. 'agent_id' => 0,
  332. 'is_staff' => 0,
  333. 'staff_id' => 0,
  334. 'division_change_time' => time()
  335. ];
  336. $userServices->update($uid, $data);
  337. //删除申请代理商记录
  338. /** @var DivisionAgentApplyServices $divisionApply */
  339. $divisionApply = app()->make(DivisionAgentApplyServices::class);
  340. $divisionApply->update(['uid' => $uid], ['is_del' => 1]);
  341. });
  342. }
  343. /**
  344. * 后台添加员工
  345. * @param $uid
  346. * @return array
  347. * @throws \FormBuilder\Exception\FormBuilderException
  348. * @author 吴汐
  349. * @email 442384644@qq.com
  350. * @date 2024/1/22
  351. */
  352. public function getDivisionStaffForm($uid)
  353. {
  354. $field = [];
  355. $field[] = Form::frameImage('image', '员工', $this->url(config('app.admin_prefix', 'admin') . '/system.user/list', ['fodder' => 'image'], true))->icon('el-icon-user')->width('950px')->height('560px')->Props(['srcKey' => 'image', 'footer' => false]);
  356. $field[] = Form::number('division_percent', '佣金比例', '')->placeholder('员工佣金比例1-100')->info('填写1-100,如填写50代表返佣50%,但是不能高于上级代理商的比例')->style(['width' => '173px'])->min(0)->max(100)->required();
  357. $field[] = Form::hidden('agent_id', $uid);
  358. return create_form('员工', $field, Route::buildUrl('/agent/division/staff/save'), 'POST');
  359. }
  360. /**
  361. * 保存员工
  362. * @param $data
  363. * @return true
  364. * @throws \think\db\exception\DataNotFoundException
  365. * @throws \think\db\exception\DbException
  366. * @throws \think\db\exception\ModelNotFoundException
  367. * @author 吴汐
  368. * @email 442384644@qq.com
  369. * @date 2024/1/22
  370. */
  371. public function divisionStaffSave($data)
  372. {
  373. $data['uid'] = $data['image']['uid'];
  374. /** @var UserServices $userServices */
  375. $userServices = app()->make(UserServices::class);
  376. $userInfo = $userServices->getUserInfo($data['uid'], 'is_division,is_agent,is_staff,division_id,agent_id,staff_id,division_end_time,division_percent');
  377. if (!$userInfo) throw new AdminException('用户不存在');
  378. if ($userInfo['is_division']) throw new AdminException('此用户是事业部,无法绑定为员工');
  379. if ($userInfo['is_agent']) throw new AdminException('此用户是代理商,无法绑定为员工');
  380. if ($userInfo['is_staff'] && $userInfo['agent_id'] == $data['agent_id']) throw new AdminException('此用户是您的员工,请勿重复添加');
  381. $agentInfo = $userServices->getUserInfo($data['agent_id'], 'division_id,agent_id,division_end_time,division_percent');
  382. $staffData = [
  383. 'spread_uid' => $data['agent_id'],
  384. 'spread_time' => time(),
  385. 'division_type' => 3,
  386. 'division_status' => 1,
  387. 'is_staff' => 1,
  388. 'division_id' => $agentInfo['division_id'],
  389. 'agent_id' => $agentInfo['agent_id'],
  390. 'staff_id' => $data['uid'],
  391. 'division_percent' => $data['division_percent'],
  392. 'division_change_time' => time(),
  393. 'division_end_time' => $agentInfo['division_end_time'],
  394. ];
  395. if ($staffData['division_percent'] > $agentInfo['division_percent']) throw new AdminException(400448);
  396. if ($userInfo['agent_id'] != 0 && $userInfo['agent_id'] != $agentInfo['agent_id']) {
  397. $userServices->update(['staff_id' => $userInfo['uid'], 'spread_uid' => $userInfo['uid']], ['spread_uid' => $agentInfo['agent_id'], 'staff_id' => 0]);
  398. $userServices->update(['staff_id' => $userInfo['uid'], 'not_spread_uid' => $userInfo['uid']], ['staff_id' => 0]);
  399. }
  400. $res = $userServices->update($data['uid'], $staffData);
  401. if ($res) return true;
  402. throw new AdminException('保存失败');
  403. }
  404. /**
  405. * 扫码绑定员工
  406. * @param $uid
  407. * @param int $agentId
  408. * @param int $agentCode
  409. * @return string
  410. * @throws DataNotFoundException
  411. * @throws DbException
  412. * @throws ModelNotFoundException
  413. * @author 吴汐
  414. * @email 442384644@qq.com
  415. * @date 2024/2/2
  416. */
  417. public function agentSpreadStaff($uid, int $agentId = 0, int $agentCode = 0)
  418. {
  419. if ($agentCode && !$agentId) {
  420. /** @var QrcodeServices $qrCode */
  421. $qrCode = app()->make(QrcodeServices::class);
  422. if ($info = $qrCode->getOne(['id' => $agentCode, 'third_type' => 'agent', 'status' => 1])) {
  423. $agentId = $info['third_id'];
  424. }
  425. }
  426. if (!$agentId) return false;
  427. if ($uid == $agentId) return '自己不能推荐自己';
  428. /** @var UserServices $userServices */
  429. $userServices = app()->make(UserServices::class);
  430. $agentInfo = $userServices->getUserInfo($agentId, 'division_id,agent_id,division_end_time,division_percent');
  431. if (!$agentInfo) return '上级用户不存在';
  432. $userInfo = $userServices->getUserInfo($uid, 'is_division,is_agent,is_staff,division_id,agent_id,staff_id,division_end_time,division_percent');
  433. if (!$userInfo) return '用户不存在';
  434. if ($userInfo['is_division']) return '您是事业部,不能绑定成为别人的员工';
  435. if ($userInfo['is_agent']) return '您是代理商,不能绑定成为别人的员工';
  436. $staffData = [
  437. 'spread_uid' => $agentId,
  438. 'spread_time' => time(),
  439. 'division_type' => 3,
  440. 'division_status' => 1,
  441. 'is_staff' => 1,
  442. 'division_id' => $agentInfo['division_id'],
  443. 'agent_id' => $agentInfo['agent_id'],
  444. 'staff_id' => $uid,
  445. 'division_change_time' => time(),
  446. ];
  447. if ($userInfo['agent_id'] != 0 && $userInfo['agent_id'] != $agentInfo['agent_id']) {
  448. $userServices->update(['staff_id' => $userInfo['uid'], 'spread_uid' => $userInfo['uid']], ['spread_uid' => $agentInfo['agent_id'], 'staff_id' => 0]);
  449. $userServices->update(['staff_id' => $userInfo['uid'], 'not_spread_uid' => $userInfo['uid']], ['staff_id' => 0]);
  450. }
  451. $res = $userServices->update($uid, $staffData);
  452. if ($res) return '绑定员工成功';
  453. return '绑定员工失败';
  454. }
  455. /**
  456. * 获取返佣比例佣金比例
  457. * 当前方法会将获得的佣金逐步的递减
  458. * @param $uid
  459. * @param $storeBrokerageRatio
  460. * @param $storeBrokerageRatioTwo
  461. * @param $isSelfBrokerage
  462. * @return array
  463. */
  464. public function getDivisionPercent($uid, $storeBrokerageRatio, $storeBrokerageRatioTwo, $isSelfBrokerage)
  465. {
  466. $division_open = (int)sys_config('division_status', 1);
  467. if (!$division_open) {
  468. /** 代理商关闭 */
  469. $storeBrokerageOne = $storeBrokerageRatio;
  470. $storeBrokerageTwo = $storeBrokerageRatioTwo;
  471. $staffPercent = 0;
  472. $agentPercent = 0;
  473. $divisionPercent = 0;
  474. } else {
  475. /** @var UserServices $userServices */
  476. $userServices = app()->make(UserServices::class);
  477. $userInfo = $userServices->get($uid);
  478. if ($userInfo['is_division'] == 1 && $userInfo['division_end_time'] > time()) {
  479. /** 自己是事业部 */
  480. if ($isSelfBrokerage) {
  481. $storeBrokerageOne = $storeBrokerageRatio;
  482. $storeBrokerageTwo = 0;
  483. $staffPercent = 0;
  484. $agentPercent = 0;
  485. $divisionPercent = 0;
  486. } else {
  487. $storeBrokerageOne = 0;
  488. $storeBrokerageTwo = 0;
  489. $staffPercent = 0;
  490. $agentPercent = 0;
  491. $divisionPercent = 0;
  492. }
  493. } elseif ($userInfo['is_agent'] == 1 && $userInfo['division_end_time'] > time()) {
  494. /** 自己是代理商 */
  495. $divisionInfo = $userServices->get($userInfo['division_id']);
  496. if ($isSelfBrokerage) {
  497. $storeBrokerageOne = $storeBrokerageRatio;
  498. $storeBrokerageTwo = 0;
  499. $staffPercent = 0;
  500. $agentPercent = 0;
  501. $divisionPercent = $divisionInfo['division_percent'] - $storeBrokerageOne;
  502. } else {
  503. $storeBrokerageOne = 0;
  504. $storeBrokerageTwo = 0;
  505. $staffPercent = 0;
  506. $agentPercent = 0;
  507. $divisionPercent = $divisionInfo['division_percent'];
  508. }
  509. } elseif ($userInfo['is_staff'] == 1 && $userInfo['division_end_time'] > time()) { // 自己是员工
  510. /** 自己是员工 */
  511. $agentInfo = $userServices->get($userInfo['agent_id']);
  512. $divisionInfo = $userServices->get($userInfo['division_id']);
  513. if ($isSelfBrokerage) {
  514. $storeBrokerageOne = $storeBrokerageRatio;
  515. $storeBrokerageTwo = 0;
  516. $staffPercent = 0;
  517. $agentPercent = $agentInfo['division_percent'] - $storeBrokerageOne;
  518. $divisionPercent = $divisionInfo['division_percent'] - $agentInfo['division_percent'];
  519. } else {
  520. $storeBrokerageOne = 0;
  521. $storeBrokerageTwo = 0;
  522. $staffPercent = 0;
  523. $agentPercent = $agentInfo['division_percent'];
  524. $divisionPercent = $divisionInfo['division_percent'] - $agentInfo['division_percent'];
  525. }
  526. } else {
  527. /** 自己是普通用户 */
  528. $staffInfo = $userServices->get($userInfo['staff_id']);
  529. $agentInfo = $userServices->get($userInfo['agent_id']);
  530. $divisionInfo = $userServices->get($userInfo['division_id']);
  531. if ($userInfo['staff_id']) {
  532. /** 该用户为员工推广 */
  533. if ($userInfo['staff_id'] == $userInfo['spread_uid']) {
  534. /** 员工直接下级 */
  535. if ($isSelfBrokerage) {
  536. $storeBrokerageOne = $storeBrokerageRatio;
  537. $storeBrokerageTwo = $staffInfo['division_percent'] - $storeBrokerageOne;
  538. $staffPercent = 0;
  539. $agentPercent = $agentInfo['division_percent'] - $staffInfo['division_percent'];
  540. $divisionPercent = $divisionInfo['division_percent'] - $agentInfo['division_percent'];
  541. } else {
  542. $storeBrokerageOne = $staffInfo['division_percent'];
  543. $storeBrokerageTwo = 0;
  544. $staffPercent = 0;
  545. $agentPercent = $agentInfo['division_percent'] - $staffInfo['division_percent'];
  546. $divisionPercent = $divisionInfo['division_percent'] - $agentInfo['division_percent'];
  547. }
  548. } elseif ($userServices->value(['uid' => $userInfo['spread_uid']], 'spread_uid') == $userInfo['staff_id']) {
  549. /** 员工间接下级 */
  550. if ($isSelfBrokerage) {
  551. $storeBrokerageOne = $storeBrokerageRatio;
  552. $storeBrokerageTwo = $storeBrokerageRatioTwo;
  553. $staffPercent = 0;
  554. $agentPercent = $agentInfo['division_percent'] - $storeBrokerageOne - $storeBrokerageTwo;
  555. $divisionPercent = $divisionInfo['division_percent'] - $agentInfo['division_percent'];
  556. } else {
  557. $storeBrokerageOne = $storeBrokerageRatio;
  558. $storeBrokerageTwo = 0;
  559. $staffPercent = $staffInfo['division_percent'] - $storeBrokerageOne;
  560. $agentPercent = $agentInfo['division_percent'] - $staffInfo['division_percent'];
  561. $divisionPercent = $divisionInfo['division_percent'] - $agentInfo['division_percent'];
  562. }
  563. } else {
  564. /** 和员工的关系超过两级 */
  565. $storeBrokerageOne = $storeBrokerageRatio;
  566. $storeBrokerageTwo = $storeBrokerageRatioTwo;
  567. $staffPercent = 0;
  568. $agentPercent = $agentInfo['division_percent'] - $storeBrokerageOne - $storeBrokerageTwo;
  569. $divisionPercent = $divisionInfo['division_percent'] - $agentInfo['division_percent'];
  570. }
  571. } elseif ($userInfo['agent_id']) {
  572. /** 该用户为代理商推广 */
  573. if ($userInfo['agent_id'] == $userInfo['spread_uid']) {
  574. /** 代理商直接下级 */
  575. if ($isSelfBrokerage) {
  576. $storeBrokerageOne = $storeBrokerageRatio;
  577. $storeBrokerageTwo = 0;
  578. $staffPercent = 0;
  579. $agentPercent = $agentInfo['division_percent'] - $storeBrokerageOne;
  580. $divisionPercent = $divisionInfo['division_percent'] - $agentInfo['division_percent'];
  581. } else {
  582. $storeBrokerageOne = 0;
  583. $storeBrokerageTwo = 0;
  584. $staffPercent = 0;
  585. $agentPercent = $agentInfo['division_percent'];
  586. $divisionPercent = $divisionInfo['division_percent'] - $agentInfo['division_percent'];
  587. }
  588. } elseif ($userServices->value(['uid' => $userInfo['spread_uid']], 'spread_uid') == $userInfo['agent_id']) {
  589. /** 代理商间接下级 */
  590. if ($isSelfBrokerage) {
  591. $storeBrokerageOne = $storeBrokerageRatio;
  592. $storeBrokerageTwo = $storeBrokerageRatioTwo;
  593. $staffPercent = 0;
  594. $agentPercent = $agentInfo['division_percent'] - $storeBrokerageOne - $storeBrokerageTwo;
  595. $divisionPercent = $divisionInfo['division_percent'] - $agentInfo['division_percent'];
  596. } else {
  597. $storeBrokerageOne = $storeBrokerageRatio;
  598. $storeBrokerageTwo = 0;
  599. $staffPercent = 0;
  600. $agentPercent = $agentInfo['division_percent'] - $storeBrokerageOne;
  601. $divisionPercent = $divisionInfo['division_percent'] - $agentInfo['division_percent'];
  602. }
  603. } else {
  604. /** 和代理商的关系超过两级 */
  605. $storeBrokerageOne = $storeBrokerageRatio;
  606. $storeBrokerageTwo = $storeBrokerageRatioTwo;
  607. $staffPercent = 0;
  608. $agentPercent = $agentInfo['division_percent'] - $storeBrokerageRatio - $storeBrokerageTwo;
  609. $divisionPercent = $divisionInfo['division_percent'] - $agentInfo['division_percent'];
  610. }
  611. } elseif ($userInfo['division_id']) {
  612. /** 该用户为事业部推广 */
  613. if ($userInfo['division_id'] == $userInfo['spread_uid']) {
  614. /** 事业部直接下级 */
  615. if ($isSelfBrokerage) {
  616. $storeBrokerageOne = $storeBrokerageRatio;
  617. $storeBrokerageTwo = 0;
  618. $staffPercent = 0;
  619. $agentPercent = 0;
  620. $divisionPercent = $divisionInfo['division_percent'] - $storeBrokerageOne;
  621. } else {
  622. $storeBrokerageOne = 0;
  623. $storeBrokerageTwo = 0;
  624. $staffPercent = 0;
  625. $agentPercent = 0;
  626. $divisionPercent = $divisionInfo['division_percent'];
  627. }
  628. } elseif ($userServices->value(['uid' => $userInfo['spread_uid']], 'spread_uid') == $userInfo['division_id']) {
  629. /** 事业部间接下级 */
  630. if ($isSelfBrokerage) {
  631. $storeBrokerageOne = $storeBrokerageRatio;
  632. $storeBrokerageTwo = $storeBrokerageRatioTwo;
  633. $staffPercent = 0;
  634. $agentPercent = 0;
  635. $divisionPercent = $divisionInfo['division_percent'] - $storeBrokerageOne - $storeBrokerageTwo;
  636. } else {
  637. $storeBrokerageOne = $storeBrokerageRatio;
  638. $storeBrokerageTwo = 0;
  639. $staffPercent = 0;
  640. $agentPercent = 0;
  641. $divisionPercent = $divisionInfo['division_percent'] - $storeBrokerageOne;
  642. }
  643. } else {
  644. /** 和事业部的关系超过两级 */
  645. $storeBrokerageOne = $storeBrokerageRatio;
  646. $storeBrokerageTwo = $storeBrokerageRatioTwo;
  647. $staffPercent = 0;
  648. $agentPercent = 0;
  649. $divisionPercent = $divisionInfo['division_percent'] - $storeBrokerageOne - $storeBrokerageTwo;
  650. }
  651. } else {
  652. /** 没有任何代理商关系 */
  653. $storeBrokerageOne = $storeBrokerageRatio;
  654. $storeBrokerageTwo = $storeBrokerageRatioTwo;
  655. $staffPercent = 0;
  656. $agentPercent = 0;
  657. $divisionPercent = 0;
  658. }
  659. }
  660. }
  661. return [max($storeBrokerageOne, 0), max($storeBrokerageTwo, 0), max($staffPercent, 0), max($agentPercent, 0), max($divisionPercent, 0)];
  662. }
  663. }