PluginApplication.php 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: shenyang
  5. * Date: 2018/12/24
  6. * Time: 3:38 PM
  7. */
  8. namespace Yunshop\AreaDividend;
  9. use app\backend\modules\menu\Menu;
  10. use app\common\facades\Setting;
  11. use app\common\models\MemberCart;
  12. use app\common\modules\shop\ShopConfig;
  13. use Config;
  14. use Yunshop\AreaDividend\Listener\CreatedCommissionListener;
  15. use Yunshop\AreaDividend\Listener\OrderCreatedListener;
  16. use Yunshop\AreaDividend\Listener\OrderFailureListener;
  17. use Yunshop\AreaDividend\Listener\OrderReceiveListener;
  18. use Yunshop\AreaDividend\models\AreaDividendAgent;
  19. use Yunshop\AreaDividend\services\TimedTaskService;
  20. use Yunshop\Supplier\common\modules\order\OrderManager;
  21. class PluginApplication extends \app\common\services\PluginApplication
  22. {
  23. public function getIncomePageItems()
  24. {
  25. return [
  26. 'areaDividend' => [
  27. 'class' => 'Yunshop\AreaDividend\Frontend\Services\IncomePageService',
  28. 'type' => 'industry'
  29. ]
  30. ];
  31. }
  32. public function incomePageIdentity($memberId)
  33. {
  34. $levelModel = AreaDividendAgent::uniacid()->where('member_id', $memberId)->where('status', 1)->first();
  35. if ($levelModel && $levelModel->level_name) {
  36. return [$levelModel->level_name];
  37. }
  38. return [""];
  39. }
  40. public function getTemplateItems()
  41. {
  42. return ['area_dividend_become_agent' => [
  43. 'title' => trans('Yunshop\AreaDividend::index.title') . "成为区域代理通知",
  44. 'subtitle' => '成为区域代理通知',
  45. 'value' => 'area_dividend_become_agent',
  46. 'param' => [
  47. '昵称', '时间', '省', '市', '区/县', '街道/乡镇'
  48. ]
  49. ], 'area_dividend_statement_notice' => [
  50. 'title' => trans('Yunshop\AreaDividend::index.title') . "分红结算通知",
  51. 'subtitle' => '分红结算通知',
  52. 'value' => 'area_dividend_statement_notice',
  53. 'param' => [
  54. '昵称', '时间', '等级', '金额'
  55. ]
  56. ]];
  57. }
  58. protected function setConfig()
  59. {
  60. \app\common\modules\shop\ShopConfig::current()->set('plugins.area-dividend.id', 10);
  61. // 手动分红配置
  62. \app\common\modules\shop\ShopConfig::current()->set('manual_arr.area_dividend_and_level', [
  63. 'uidColumn' => 'member_id',
  64. 'levelNameColumn' => 'level_name',
  65. 'relationsColumn' => 'agent_level',
  66. 'enableLevel' => true,
  67. 'type_name' => '区域代理',
  68. 'role_type' => 'area_dividend_and_level'
  69. ]);
  70. \app\common\modules\shop\ShopConfig::current()->set('manual_arr_cfg.area_dividend_and_level', [
  71. 'roleTableClass' => \Yunshop\AreaDividend\models\AreaDividendAgent::class
  72. ]);
  73. \app\common\modules\shop\ShopConfig::current()->set('plugin.areaDividend', [
  74. 'title' => trans('Yunshop\AreaDividend::index.title'),
  75. 'ico' => 'icon-quyu01',
  76. 'type' => 'areaDividend',
  77. 'class' => 'Yunshop\AreaDividend\models\AreaDividend',
  78. 'order_class' => '',
  79. 'agent_class' => 'Yunshop\AreaDividend\models\AreaDividendAgent',
  80. 'agent_name' => 'getAgentByMemberId',
  81. 'agent_status' => '1',
  82. ]);
  83. \app\common\modules\shop\ShopConfig::current()->set('observer.goods.area_dividend', [
  84. 'class' => 'Yunshop\AreaDividend\models\AreaDividendGoods',
  85. 'function_validator' => 'relationValidator',
  86. 'function_save' => 'relationSave'
  87. ]);
  88. \app\common\modules\shop\ShopConfig::current()->set('appointment_area_reward', [
  89. 'class' => 'Yunshop\AreaDividend\services\AppointmentService',
  90. 'function' => 'appointmentReward'
  91. ]);
  92. \app\common\modules\shop\ShopConfig::current()->push('shop-foundation.member-cart.with', 'goods.areaDividendGoods');
  93. \app\common\modules\shop\ShopConfig::current()->push('shop-foundation.member-cart.with', 'goods.areaDividendGoods');
  94. }
  95. public function getShopConfigItems()
  96. {
  97. return [];
  98. }
  99. public function getWidgetItems()
  100. {
  101. return ['goods.tab_area_dividend' => [
  102. 'title' => trans('Yunshop\AreaDividend::index.title'),
  103. 'class' => 'Yunshop\AreaDividend\widgets\DividendWidget'
  104. ], 'withdraw.tab_area_dividend' => [
  105. 'title' => '区域分红提现',
  106. 'class' => 'Yunshop\AreaDividend\widgets\AreaDividendWithdrawWidget'
  107. ], 'vue-goods.area_dividend' => [
  108. 'title' => trans('Yunshop\AreaDividend::index.title'),
  109. 'class' => \Yunshop\AreaDividend\widgets\DividendVueWidget::class,
  110. ]];
  111. }
  112. protected function setMenuConfig()
  113. {
  114. /**
  115. * 区域分红菜单
  116. */
  117. \app\backend\modules\menu\Menu::current()->setPluginMenu('area_dividend', [
  118. 'name' => '区域分红',
  119. 'type' => 'marketing',
  120. 'url' => 'plugin.area-dividend.admin.area-dividend-set.index',
  121. 'url_params' => '',
  122. 'permit' => 1,
  123. 'menu' => 1,
  124. 'top_show' => 0,
  125. 'left_first_show' => 0,
  126. 'left_second_show' => 1,
  127. 'icon' => 'fa-child',//菜单图标
  128. 'list_icon' => 'area_dividend',//菜单图标
  129. 'parents' => [],
  130. 'child' => [
  131. 'area_dividend_set' => [
  132. 'name' => '分红设置',
  133. 'permit' => 1,
  134. 'menu' => 1,
  135. 'icon' => '',
  136. 'url' => 'plugin.area-dividend.admin.area-dividend-set.index',
  137. 'url_params' => '',
  138. 'parents' => ['area_dividend'],
  139. 'child' => [
  140. 'dividend_set' => [
  141. 'name' => '分红设置',
  142. 'url' => 'plugin.area-dividend.admin.area-dividend-set.index',
  143. 'permit' => 1,
  144. 'menu' => 0,
  145. 'parents' => ['area_dividend', 'area_dividend_set'],
  146. ]
  147. ]
  148. ],
  149. 'area_dividend_agent' => [
  150. 'name' => '区域代理管理',
  151. 'permit' => 1,
  152. 'menu' => 1,
  153. 'icon' => '',
  154. 'url' => 'plugin.area-dividend.admin.agent.index',
  155. 'url_params' => '',
  156. 'parents' => ['area_dividend'],
  157. 'child' => [
  158. 'agent_index' => [
  159. 'name' => '代理列表',
  160. 'url' => 'plugin.area-dividend.admin.agent.index',
  161. 'permit' => 1,
  162. 'menu' => 0,
  163. 'parents' => ['area_dividend', 'area_dividend_agent']
  164. ],
  165. 'agent_add' => [
  166. 'name' => '添加代理',
  167. 'url' => 'plugin.area-dividend.admin.agent.create-agent',
  168. 'permit' => 1,
  169. 'menu' => 0,
  170. 'parents' => ['area_dividend',
  171. 'area_dividend_agent']
  172. ],
  173. 'agent_deleted' => ['name' => '删除代理',
  174. 'permit' => 1,
  175. 'url' => 'plugin.area-dividend.admin.agent.daletedAgency',
  176. 'menu' => 0,
  177. 'parents' => ['area_dividend', 'area_dividend_agent']
  178. ],
  179. 'agent_edit' => ['name' => '编辑账号',
  180. 'permit' => 1,
  181. 'url' => 'plugin.area-dividend.admin.agent.editAgency',
  182. 'menu' => 0,
  183. 'parents' => ['area_dividend', 'area_dividend_agent']
  184. ],
  185. 'agent_update_level' => ['name' => '修改代理等级',
  186. 'permit' => 0,
  187. 'url' => 'plugin.area-dividend.admin.agent.change',
  188. 'menu' => 0,
  189. 'parents' => ['area_dividend', 'area_dividend_agent']
  190. ],
  191. 'agent_export' => [
  192. 'name' => '导出 EXCEL',
  193. 'url' => 'plugin.area-dividend.admin.agent.export',
  194. 'permit' => 1,
  195. 'menu' => 0,
  196. 'parents' => ['area_dividend', 'area_dividend_agent']
  197. ],
  198. ]
  199. ],
  200. 'area_dividend_agent_apply' => [
  201. 'name' => '区域代理申请',
  202. 'permit' => 1,
  203. 'menu' => 1,
  204. 'icon' => '',
  205. 'url' => 'plugin.area-dividend.admin.agent.agent-apply',
  206. 'url_params' => '',
  207. 'parents' => ['area_dividend'],
  208. 'child' => [
  209. 'agent_apply' => [
  210. 'name' => '查看申请',
  211. 'url' => 'plugin.area-dividend.admin.agent.agent-apply',
  212. 'permit' => 1,
  213. 'menu' => 0,
  214. 'parents' => ['area_dividend', 'area_dividend_agent_apply'],
  215. ],
  216. 'apply' => [
  217. 'name' => '申请审核',
  218. 'url' => 'plugin.area-dividend.admin.agent.cope-apply',
  219. 'permit' => 1,
  220. 'menu' => 0,
  221. 'parents' => ['area_dividend', 'area_dividend_agent_apply'],
  222. ]
  223. ]
  224. ],
  225. 'area_dividend_log' => [
  226. 'name' => '区域分红记录',
  227. 'permit' => 1,
  228. 'menu' => 1,
  229. 'icon' => '',
  230. 'url' => 'plugin.area-dividend.admin.dividend.get-list',
  231. 'url_params' => '',
  232. 'parents' => ['area_dividend'],
  233. 'child' => [
  234. 'agent_apply' => [
  235. 'name' => '查看记录',
  236. 'url' => 'plugin.area-dividend.admin.dividend.get-list',
  237. 'permit' => 1,
  238. 'menu' => 0,
  239. 'parents' => ['area_dividend', 'area_dividend_log'],
  240. ],
  241. 'agent_export' => [
  242. 'name' => '导出',
  243. 'url' => 'plugin.area-dividend.admin.dividend.export',
  244. 'permit' => 1,
  245. 'menu' => 0,
  246. 'parents' => ['area_dividend', 'area_dividend_log'],
  247. ],
  248. 'agent_detail' => [
  249. 'name' => '查看详情',
  250. 'url' => 'plugin.area-dividend.admin.dividend.get-detail',
  251. 'permit' => 1,
  252. 'menu' => 0,
  253. 'parents' => ['area_dividend', 'area_dividend_log'],
  254. ]
  255. ]
  256. ]
  257. ]
  258. ]);
  259. $area = \Yunshop\AreaDividend\models\AreaDividendAgent::getAgentByUserId(\YunShop::app()->uid)->first();
  260. $coupon_menu = [];
  261. if (app('plugins')->isEnabled('coupon-store') && \Yunshop\CouponStore\services\SettingService::getSetting()['open_state']){
  262. $coupon_menu = \Yunshop\CouponStore\services\MenuService::getMenu();
  263. }
  264. if ($area || $coupon_menu){
  265. Config::set('menu', []);
  266. }
  267. if ($coupon_menu){
  268. Menu::current()->setMainMenu('coupon_store_menu',$coupon_menu);
  269. }
  270. if ($area) {
  271. Menu::current()->setMainMenu('area_admin_menu', [
  272. 'name' => '区域',
  273. 'url' => 'plugin.area-dividend.area.order-manage.index',// url 可以填写http 也可以直接写路由
  274. 'urlParams' => '',//如果是url填写的是路由则启用参数否则不启用
  275. 'permit' => 0,//如果不设置则不会做权限检测
  276. 'menu' => 1,//如果不设置则不显示菜单,子菜单也将不显示
  277. 'icon' => 'fa-home',//菜单图标
  278. 'parents' => [],
  279. 'top_show' => 0,
  280. 'left_first_show' => 1,
  281. 'left_second_show' => 1,
  282. 'child' => [
  283. 'area_admin_order' => [
  284. 'name' => '区域订单',
  285. 'url' => 'plugin.area-dividend.area.area-order.index',
  286. 'url_params' => '',
  287. 'permit' => 0,
  288. 'menu' => 1,
  289. 'icon' => '',
  290. 'item' => 'area_admin_order',
  291. 'parents' => ['area_admin_menu'],
  292. 'child' => [
  293. 'area_order_export' => [
  294. 'name' => '导出',
  295. 'url' => 'plugin.area-dividend.area.area-order.export',
  296. 'permit' => 0,
  297. 'menu' => 0,
  298. 'parents' => ['area_admin_menu', 'area_admin_order'],
  299. ],
  300. ]
  301. ],
  302. 'area_admin_shop' => [
  303. 'name' => '区域商家',
  304. 'url' => 'plugin.area-dividend.area.area-shop.index',
  305. 'url_params' => '',
  306. 'permit' => 0,
  307. 'menu' => 1,
  308. 'icon' => '',
  309. 'item' => 'area_admin_shop',
  310. 'parents' => ['area_admin_menu'],
  311. 'child' => [
  312. 'shop_export' => [
  313. 'name' => '导出',
  314. 'url' => 'plugin.area-dividend.area.area-shop.export',
  315. 'permit' => 0,
  316. 'menu' => 0,
  317. 'parents' => ['area_admin_menu', 'area_admin_shop'],
  318. ],
  319. ]
  320. ],
  321. 'area_admin_dividend_log' => [
  322. 'name' => '区域分红',
  323. 'url' => 'plugin.area-dividend.area.dividend-log.index',
  324. 'url_params' => '',
  325. 'permit' => 0,
  326. 'menu' => 1,
  327. 'icon' => '',
  328. 'item' => 'area_admin_dividend_log',
  329. 'parents' => ['area_admin_menu'],
  330. 'child' => [
  331. 'dividend_export' => [
  332. 'name' => '导出',
  333. 'url' => 'plugin.area-dividend.area.dividend-log.export',
  334. 'permit' => 0,
  335. 'menu' => 0,
  336. 'parents' => ['area_admin_menu', 'area_admin_dividend_log'],
  337. ],
  338. ]
  339. ],
  340. 'area_admin_return_address' => [
  341. 'name' => '退货地址设置',
  342. 'url' => 'plugin.area-dividend.area.return-address.index',
  343. 'url_params' => '',
  344. 'permit' => 0,
  345. 'menu' => 1,
  346. 'icon' => '',
  347. 'item' => 'area_admin_return_address',
  348. 'parents' => ['area_admin_menu'],
  349. 'child' => [
  350. 'area_admin_return_address_add' => [
  351. 'name' => '添加',
  352. 'url' => 'plugin.area-dividend.area.return-address.add',
  353. 'permit' => 0,
  354. 'menu' => 0,
  355. 'parents' => ['area_admin_menu', 'area_admin_return_address'],
  356. ],
  357. 'area_admin_return_address_edit' => [
  358. 'name' => '修改',
  359. 'url' => 'plugin.area-dividend.area.return-address.edit',
  360. 'permit' => 0,
  361. 'menu' => 0,
  362. 'parents' => ['area_admin_menu', 'area_admin_return_address'],
  363. ],
  364. 'area_admin_return_address_del' => [
  365. 'name' => '删除',
  366. 'url' => 'plugin.area-dividend.area.return-address.delete',
  367. 'permit' => 0,
  368. 'menu' => 0,
  369. 'parents' => ['area_admin_menu', 'area_admin_return_address'],
  370. ],
  371. ]
  372. ],
  373. 'area_admin_order_manage' => [
  374. 'name' => '订单列表',
  375. 'url' => 'plugin.area-dividend.area.order-manage.index',
  376. 'url_params' => '',
  377. 'permit' => 0,
  378. 'menu' => 1,
  379. 'icon' => '',
  380. 'item' => 'area_admin_order_manage',
  381. 'parents' => ['area_admin_menu'],
  382. 'child' => [
  383. 'area_admin_order_detail' => [
  384. 'name' => '订单详情',
  385. 'url' => 'plugin.area-dividend.area.order-detail.index',
  386. 'permit' => 0,
  387. 'menu' => 0,
  388. 'parents' => ['area_admin_menu', 'area_admin_order_manage'],
  389. ],
  390. 'area_admin_order_refund_reject' => [
  391. 'name' => '驳回',
  392. 'url' => 'refund.operation.reject',
  393. 'permit' => 0,
  394. 'menu' => 0,
  395. 'parents' => ['area_admin_menu', 'area_admin_order_manage'],
  396. ],
  397. 'area_admin_order_refund_pass' => [
  398. 'name' => '通过',
  399. 'url' => 'refund.operation.pass',
  400. 'permit' => 0,
  401. 'menu' => 0,
  402. 'parents' => ['area_admin_menu', 'area_admin_order_manage'],
  403. ],
  404. 'area_admin_order_operation_send' => [
  405. 'name' => '发货',
  406. 'url' => 'order.operation.send',
  407. 'permit' => 0,
  408. 'menu' => 0,
  409. 'parents' => ['area_admin_menu', 'area_admin_order_manage'],
  410. ],
  411. 'area_admin_order_operation_cancel_send' => [
  412. 'name' => '取消发货',
  413. 'url' => 'order.operation.cancel-send',
  414. 'permit' => 0,
  415. 'menu' => 0,
  416. 'parents' => ['area_admin_menu', 'area_admin_order_manage'],
  417. ],
  418. //order.operation.cancel-send
  419. ]
  420. ],
  421. 'area_admin_store_order_manage' => [
  422. 'name' => '门店订单列表',
  423. 'url' => 'plugin.area-dividend.area.store-order-manage.index',
  424. 'url_params' => '',
  425. 'permit' => 0,
  426. 'menu' => 1,
  427. 'icon' => '',
  428. 'item' => 'area_admin_store_order_manage',
  429. 'parents' => ['area_admin_menu'],
  430. 'child' => [
  431. 'area_admin_store-order_detail' => [
  432. 'name' => '门店订单详情',
  433. 'url' => 'plugin.area-dividend.area.order-detail.store-index',
  434. 'permit' => 0,
  435. 'menu' => 0,
  436. 'parents' => ['area_admin_menu', 'area_admin_store_order_manage'],
  437. ],
  438. //order.operation.cancel-send
  439. ]
  440. ],
  441. 'area_admin_order_batch_send' => [
  442. 'name' => '批量发货',
  443. 'url' => 'plugin.area-dividend.area.batch-send.index',
  444. 'url_params' => '',
  445. 'permit' => 0,
  446. 'menu' => 1,
  447. 'icon' => '',
  448. 'item' => 'area_admin_order_batch_send',
  449. 'parents' => ['area_admin_menu'],
  450. 'child' => [
  451. 'area_admin_order_batch_send_example' => [
  452. 'name' => '下载模版',
  453. 'url' => 'plugin.area-dividend.area.batch-send..get-example',
  454. 'permit' => 0,
  455. 'menu' => 0,
  456. 'parents' => ['area_admin_menu', 'area_admin_order_batch_send'],
  457. ],
  458. ]
  459. ],
  460. 'area_admin_point_log_list' => [
  461. 'name' => '赠送积分明细',
  462. 'url' => 'plugin.area-dividend.area.point-log.index',
  463. 'url_params' => '',
  464. 'permit' => 0,
  465. 'menu' => 1,
  466. 'icon' => '',
  467. 'item' => 'area_admin_point_log_list',
  468. 'parents' => ['area_admin_menu'],
  469. 'child' => [
  470. 'area_admin_point_log_export' => [
  471. 'name' => '积分导出',
  472. 'url' => 'plugin.area-dividend.area.point-log.export',
  473. 'permit' => 0,
  474. 'menu' => 0,
  475. 'parents' => ['area_admin_menu', 'area_admin_point_log_list'],
  476. ],
  477. ]
  478. ],
  479. ]
  480. ]);
  481. }
  482. }
  483. public function getIncomeItems()
  484. {
  485. $lang = \Setting::get('shop.lang', ['lang' => 'zh_cn'])['zh_cn']['area_dividend'];
  486. return ['areaDividend' => [
  487. 'title' => $lang['title'] ?: trans('Yunshop\AreaDividend::index.title'),
  488. 'type' => 'areaDividend',
  489. 'class' => 'Yunshop\AreaDividend\models\AreaDividend',
  490. 'order_class' => '',
  491. ]];
  492. }
  493. public function boot()
  494. {
  495. $events = app('events');
  496. /**
  497. * 创建订单
  498. * OrderCreatedListener
  499. */
  500. $events->subscribe(OrderCreatedListener::class);
  501. $events->subscribe(CreatedCommissionListener::class);
  502. /**
  503. * 订单收货
  504. * OrderReceiveListener
  505. *
  506. */
  507. $events->subscribe(OrderReceiveListener::class);
  508. /**
  509. * 订单失效
  510. * OrderReceiveListener
  511. *
  512. */
  513. $events->subscribe(OrderFailureListener::class);
  514. /*
  515. * 定时任务处理
  516. *
  517. */
  518. \Event::listen('cron.collectJobs', function () {
  519. \Cron::add('Area-dividend', '*/1 * * * *', function () {
  520. (new TimedTaskService())->handle();
  521. return;
  522. });
  523. });
  524. }
  525. public function register()
  526. {
  527. $this->singleton('OrderManager', OrderManager::class);
  528. $this->bind(MemberCart::class, function (PluginApplication $pluginApp, array $params) {
  529. return new \Yunshop\Supplier\common\models\MemberCart($params[0]);
  530. });
  531. }
  532. }