bztang-admin/plugins/area-dividend/src/PluginApplication.php

531 lines
23 KiB
PHP

<?php
/**
* Created by PhpStorm.
* User: shenyang
* Date: 2018/12/24
* Time: 3:38 PM
*/
namespace Yunshop\AreaDividend;
use app\backend\modules\menu\Menu;
use app\common\facades\Setting;
use app\common\models\MemberCart;
use app\common\modules\shop\ShopConfig;
use Config;
use Yunshop\AreaDividend\Listener\CreatedCommissionListener;
use Yunshop\AreaDividend\Listener\OrderCreatedListener;
use Yunshop\AreaDividend\Listener\OrderFailureListener;
use Yunshop\AreaDividend\Listener\OrderReceiveListener;
use Yunshop\AreaDividend\models\AreaDividendAgent;
use Yunshop\AreaDividend\services\TimedTaskService;
use Yunshop\Supplier\common\modules\order\OrderManager;
class PluginApplication extends \app\common\services\PluginApplication
{
public function getIncomePageItems()
{
return [
'areaDividend' => [
'class' => 'Yunshop\AreaDividend\Frontend\Services\IncomePageService',
'type' => 'industry'
]
];
}
public function incomePageIdentity($memberId)
{
$levelModel = AreaDividendAgent::uniacid()->where('member_id', $memberId)->where('status', 1)->first();
if ($levelModel && $levelModel->level_name) {
return [$levelModel->level_name];
}
return [""];
}
public function getTemplateItems()
{
return ['area_dividend_become_agent' => [
'title' => trans('Yunshop\AreaDividend::index.title') . "成为区域代理通知",
'subtitle' => '成为区域代理通知',
'value' => 'area_dividend_become_agent',
'param' => [
'昵称', '时间', '省', '市', '区/县', '街道/乡镇'
]
], 'area_dividend_statement_notice' => [
'title' => trans('Yunshop\AreaDividend::index.title') . "分红结算通知",
'subtitle' => '分红结算通知',
'value' => 'area_dividend_statement_notice',
'param' => [
'昵称', '时间', '等级', '金额'
]
]];
}
protected function setConfig()
{
\app\common\modules\shop\ShopConfig::current()->set('plugins.area-dividend.id', 10);
// 手动分红配置
\app\common\modules\shop\ShopConfig::current()->set('manual_arr.area_dividend_and_level', [
'uidColumn' => 'member_id',
'levelNameColumn' => 'level_name',
'relationsColumn' => 'agent_level',
'enableLevel' => true,
'type_name' => '区域代理',
'role_type' => 'area_dividend_and_level'
]);
\app\common\modules\shop\ShopConfig::current()->set('manual_arr_cfg.area_dividend_and_level', [
'roleTableClass' => \Yunshop\AreaDividend\models\AreaDividendAgent::class
]);
\app\common\modules\shop\ShopConfig::current()->set('plugin.areaDividend', [
'title' => trans('Yunshop\AreaDividend::index.title'),
'ico' => 'icon-quyu01',
'type' => 'areaDividend',
'class' => 'Yunshop\AreaDividend\models\AreaDividend',
'order_class' => '',
'agent_class' => 'Yunshop\AreaDividend\models\AreaDividendAgent',
'agent_name' => 'getAgentByMemberId',
'agent_status' => '1',
]);
\app\common\modules\shop\ShopConfig::current()->set('observer.goods.area_dividend', [
'class' => 'Yunshop\AreaDividend\models\AreaDividendGoods',
'function_validator' => 'relationValidator',
'function_save' => 'relationSave'
]);
\app\common\modules\shop\ShopConfig::current()->push('shop-foundation.member-cart.with', 'goods.areaDividendGoods');
\app\common\modules\shop\ShopConfig::current()->push('shop-foundation.member-cart.with', 'goods.areaDividendGoods');
}
public function getShopConfigItems()
{
return [];
}
public function getWidgetItems()
{
return ['goods.tab_area_dividend' => [
'title' => trans('Yunshop\AreaDividend::index.title'),
'class' => 'Yunshop\AreaDividend\widgets\DividendWidget'
], 'withdraw.tab_area_dividend' => [
'title' => '区域分红提现',
'class' => 'Yunshop\AreaDividend\widgets\AreaDividendWithdrawWidget'
], 'vue-goods.area_dividend' => [
'title' => trans('Yunshop\AreaDividend::index.title'),
'class' => \Yunshop\AreaDividend\widgets\DividendVueWidget::class,
]];
}
protected function setMenuConfig()
{
/**
* 区域分红菜单
*/
\app\backend\modules\menu\Menu::current()->setPluginMenu('area_dividend', [
'name' => '区域分红',
'type' => 'marketing',
'url' => 'plugin.area-dividend.admin.area-dividend-set.index',
'url_params' => '',
'permit' => 1,
'menu' => 1,
'top_show' => 0,
'left_first_show' => 0,
'left_second_show' => 1,
'icon' => 'fa-child',//菜单图标
'list_icon' => 'area_dividend',//菜单图标
'parents' => [],
'child' => [
'area_dividend_set' => [
'name' => '分红设置',
'permit' => 1,
'menu' => 1,
'icon' => '',
'url' => 'plugin.area-dividend.admin.area-dividend-set.index',
'url_params' => '',
'parents' => ['area_dividend'],
'child' => [
'dividend_set' => [
'name' => '分红设置',
'url' => 'plugin.area-dividend.admin.area-dividend-set.index',
'permit' => 1,
'menu' => 0,
'parents' => ['area_dividend', 'area_dividend_set'],
]
]
],
'area_dividend_agent' => [
'name' => '区域代理管理',
'permit' => 1,
'menu' => 1,
'icon' => '',
'url' => 'plugin.area-dividend.admin.agent.index',
'url_params' => '',
'parents' => ['area_dividend'],
'child' => [
'agent_index' => [
'name' => '代理列表',
'url' => 'plugin.area-dividend.admin.agent.index',
'permit' => 1,
'menu' => 0,
'parents' => ['area_dividend', 'area_dividend_agent']
],
'agent_add' => [
'name' => '添加代理',
'url' => 'plugin.area-dividend.admin.agent.create-agent',
'permit' => 1,
'menu' => 0,
'parents' => ['area_dividend',
'area_dividend_agent']
],
'agent_deleted' => ['name' => '删除代理',
'permit' => 1,
'url' => 'plugin.area-dividend.admin.agent.daletedAgency',
'menu' => 0,
'parents' => ['area_dividend', 'area_dividend_agent']
],
'agent_edit' => ['name' => '编辑账号',
'permit' => 1,
'url' => 'plugin.area-dividend.admin.agent.editAgency',
'menu' => 0,
'parents' => ['area_dividend', 'area_dividend_agent']
],
'agent_update_level' => ['name' => '修改代理等级',
'permit' => 0,
'url' => 'plugin.area-dividend.admin.agent.change',
'menu' => 0,
'parents' => ['area_dividend', 'area_dividend_agent']
],
'agent_export' => [
'name' => '导出 EXCEL',
'url' => 'plugin.area-dividend.admin.agent.export',
'permit' => 1,
'menu' => 0,
'parents' => ['area_dividend', 'area_dividend_agent']
],
]
],
'area_dividend_agent_apply' => [
'name' => '区域代理申请',
'permit' => 1,
'menu' => 1,
'icon' => '',
'url' => 'plugin.area-dividend.admin.agent.agent-apply',
'url_params' => '',
'parents' => ['area_dividend'],
'child' => [
'agent_apply' => [
'name' => '查看申请',
'url' => 'plugin.area-dividend.admin.agent.agent-apply',
'permit' => 1,
'menu' => 0,
'parents' => ['area_dividend', 'area_dividend_agent_apply'],
],
'apply' => [
'name' => '申请审核',
'url' => 'plugin.area-dividend.admin.agent.cope-apply',
'permit' => 1,
'menu' => 0,
'parents' => ['area_dividend', 'area_dividend_agent_apply'],
]
]
],
'area_dividend_log' => [
'name' => '区域分红记录',
'permit' => 1,
'menu' => 1,
'icon' => '',
'url' => 'plugin.area-dividend.admin.dividend.get-list',
'url_params' => '',
'parents' => ['area_dividend'],
'child' => [
'agent_apply' => [
'name' => '查看记录',
'url' => 'plugin.area-dividend.admin.dividend.get-list',
'permit' => 1,
'menu' => 0,
'parents' => ['area_dividend', 'area_dividend_log'],
],
'agent_export' => [
'name' => '导出',
'url' => 'plugin.area-dividend.admin.dividend.export',
'permit' => 1,
'menu' => 0,
'parents' => ['area_dividend', 'area_dividend_log'],
],
'agent_detail' => [
'name' => '查看详情',
'url' => 'plugin.area-dividend.admin.dividend.get-detail',
'permit' => 1,
'menu' => 0,
'parents' => ['area_dividend', 'area_dividend_log'],
]
]
]
]
]);
$area = \Yunshop\AreaDividend\models\AreaDividendAgent::getAgentByUserId(\YunShop::app()->uid)->first();
if ($area) {
Config::set('menu', []);
Menu::current()->setMainMenu('area_admin_menu', [
'name' => '区域',
'url' => 'plugin.area-dividend.area.order-manage.index',// url 可以填写http 也可以直接写路由
'urlParams' => '',//如果是url填写的是路由则启用参数否则不启用
'permit' => 0,//如果不设置则不会做权限检测
'menu' => 1,//如果不设置则不显示菜单,子菜单也将不显示
'icon' => 'fa-home',//菜单图标
'parents' => [],
'top_show' => 0,
'left_first_show' => 1,
'left_second_show' => 1,
'child' => [
'area_admin_order' => [
'name' => '区域订单',
'url' => 'plugin.area-dividend.area.area-order.index',
'url_params' => '',
'permit' => 0,
'menu' => 1,
'icon' => '',
'item' => 'area_admin_order',
'parents' => ['area_admin_menu'],
'child' => [
'area_order_export' => [
'name' => '导出',
'url' => 'plugin.area-dividend.area.area-order.export',
'permit' => 0,
'menu' => 0,
'parents' => ['area_admin_menu', 'area_admin_order'],
],
]
],
'area_admin_shop' => [
'name' => '区域商家',
'url' => 'plugin.area-dividend.area.area-shop.index',
'url_params' => '',
'permit' => 0,
'menu' => 1,
'icon' => '',
'item' => 'area_admin_shop',
'parents' => ['area_admin_menu'],
'child' => [
'shop_export' => [
'name' => '导出',
'url' => 'plugin.area-dividend.area.area-shop.export',
'permit' => 0,
'menu' => 0,
'parents' => ['area_admin_menu', 'area_admin_shop'],
],
]
],
'area_admin_dividend_log' => [
'name' => '区域分红',
'url' => 'plugin.area-dividend.area.dividend-log.index',
'url_params' => '',
'permit' => 0,
'menu' => 1,
'icon' => '',
'item' => 'area_admin_dividend_log',
'parents' => ['area_admin_menu'],
'child' => [
'dividend_export' => [
'name' => '导出',
'url' => 'plugin.area-dividend.area.dividend-log.export',
'permit' => 0,
'menu' => 0,
'parents' => ['area_admin_menu', 'area_admin_dividend_log'],
],
]
],
'area_admin_return_address' => [
'name' => '退货地址设置',
'url' => 'plugin.area-dividend.area.return-address.index',
'url_params' => '',
'permit' => 0,
'menu' => 1,
'icon' => '',
'item' => 'area_admin_return_address',
'parents' => ['area_admin_menu'],
'child' => [
'area_admin_return_address_add' => [
'name' => '添加',
'url' => 'plugin.area-dividend.area.return-address.add',
'permit' => 0,
'menu' => 0,
'parents' => ['area_admin_menu', 'area_admin_return_address'],
],
'area_admin_return_address_edit' => [
'name' => '修改',
'url' => 'plugin.area-dividend.area.return-address.edit',
'permit' => 0,
'menu' => 0,
'parents' => ['area_admin_menu', 'area_admin_return_address'],
],
'area_admin_return_address_del' => [
'name' => '删除',
'url' => 'plugin.area-dividend.area.return-address.delete',
'permit' => 0,
'menu' => 0,
'parents' => ['area_admin_menu', 'area_admin_return_address'],
],
]
],
'area_admin_order_manage' => [
'name' => '订单列表',
'url' => 'plugin.area-dividend.area.order-manage.index',
'url_params' => '',
'permit' => 0,
'menu' => 1,
'icon' => '',
'item' => 'area_admin_order_manage',
'parents' => ['area_admin_menu'],
'child' => [
'area_admin_order_detail' => [
'name' => '订单详情',
'url' => 'plugin.area-dividend.area.order-detail.index',
'permit' => 0,
'menu' => 0,
'parents' => ['area_admin_menu', 'area_admin_order_manage'],
],
'area_admin_order_refund_reject' => [
'name' => '驳回',
'url' => 'refund.operation.reject',
'permit' => 0,
'menu' => 0,
'parents' => ['area_admin_menu', 'area_admin_order_manage'],
],
'area_admin_order_refund_pass' => [
'name' => '通过',
'url' => 'refund.operation.pass',
'permit' => 0,
'menu' => 0,
'parents' => ['area_admin_menu', 'area_admin_order_manage'],
],
'area_admin_order_operation_send' => [
'name' => '发货',
'url' => 'order.operation.send',
'permit' => 0,
'menu' => 0,
'parents' => ['area_admin_menu', 'area_admin_order_manage'],
],
'area_admin_order_operation_cancel_send' => [
'name' => '取消发货',
'url' => 'order.operation.cancel-send',
'permit' => 0,
'menu' => 0,
'parents' => ['area_admin_menu', 'area_admin_order_manage'],
],
//order.operation.cancel-send
]
],
'area_admin_store_order_manage' => [
'name' => '门店订单列表',
'url' => 'plugin.area-dividend.area.store-order-manage.index',
'url_params' => '',
'permit' => 0,
'menu' => 1,
'icon' => '',
'item' => 'area_admin_store_order_manage',
'parents' => ['area_admin_menu'],
'child' => [
'area_admin_store-order_detail' => [
'name' => '门店订单详情',
'url' => 'plugin.area-dividend.area.order-detail.store-index',
'permit' => 0,
'menu' => 0,
'parents' => ['area_admin_menu', 'area_admin_store_order_manage'],
],
//order.operation.cancel-send
]
],
'area_admin_order_batch_send' => [
'name' => '批量发货',
'url' => 'plugin.area-dividend.area.batch-send.index',
'url_params' => '',
'permit' => 0,
'menu' => 1,
'icon' => '',
'item' => 'area_admin_order_batch_send',
'parents' => ['area_admin_menu'],
'child' => [
'area_admin_order_batch_send_example' => [
'name' => '下载模版',
'url' => 'plugin.area-dividend.area.batch-send..get-example',
'permit' => 0,
'menu' => 0,
'parents' => ['area_admin_menu', 'area_admin_order_batch_send'],
],
]
],
]
]);
}
}
public function getIncomeItems()
{
$lang = \Setting::get('shop.lang', ['lang' => 'zh_cn'])['zh_cn']['area_dividend'];
return ['areaDividend' => [
'title' => $lang['title'] ?: trans('Yunshop\AreaDividend::index.title'),
'type' => 'areaDividend',
'class' => 'Yunshop\AreaDividend\models\AreaDividend',
'order_class' => '',
]];
}
public function boot()
{
$events = app('events');
/**
* 创建订单
* OrderCreatedListener
*/
$events->subscribe(OrderCreatedListener::class);
$events->subscribe(CreatedCommissionListener::class);
/**
* 订单收货
* OrderReceiveListener
*
*/
$events->subscribe(OrderReceiveListener::class);
/**
* 订单失效
* OrderReceiveListener
*
*/
$events->subscribe(OrderFailureListener::class);
/*
* 定时任务处理
*
*/
\Event::listen('cron.collectJobs', function () {
\Cron::add('Area-dividend', '*/1 * * * *', function () {
(new TimedTaskService())->handle();
return;
});
});
}
public function register()
{
$this->singleton('OrderManager', OrderManager::class);
$this->bind(MemberCart::class, function (PluginApplication $pluginApp, array $params) {
return new \Yunshop\Supplier\common\models\MemberCart($params[0]);
});
}
}