Symfony网校edusoho分销插件二次开发-附代码

Symfony网校edusoho分销插件二次开发-附代码
原文链接 https://m.zkdygl.com/d/38-edusoho

两种分销模式,指定分销和人人分销;
1、指定分销:用户默认无分销权限,需要后台开通分销权限后,才可以推广下级获得返佣;
2、人人分销:用户默认开启分销权限,新用户进入系统直接是分销推广员。可直接推广下级。
两种模式的推广方式、返佣方式均相同;

3、返佣规则
A推广B,B推广了C;
A购买专题后,自己没有返佣;
B购买专题后,A获得一级返佣;
C购买了专题,B获得一级返佣,A获得二级返佣
在这里插入图片描述
4、推广佣金计算
一级佣金 = 专题售价 x 一级返佣比例
二级佣金 = 专题售价 x 二级返佣比例
(一级返佣、二级返佣设置的数字:例如80,代表返佣金额为课程售价的80%)

5、佣金提现
用户需要在前端申请提现;
支付宝提现到账方式;
商家通过后台的申请记录在线下人工转账。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

DistributionController.php

<?php

namespace DistributionPlugin\Controller\My;

use AppBundle\Common\ArrayToolkit;
use AppBundle\Common\Paginator;
use AppBundle\Common\StringToolkit;
use AppBundle\Controller\BaseController;
use Biz\System\Service\SettingService;
use Biz\User\Service\UserService;
use DistributionPlugin\Biz\Distribution\Service\DistributionService;
use DistributionPlugin\Biz\Distribution\Service\RewardService;
use Symfony\Component\HttpFoundation\Request;

class DistributionController extends BaseController
{
    public function indexAction(Request $request)
    {
        $user = $this->getCurrentUser();
        $distributionSetting = $this->getSettingService()->get('plugin_distribution');

        if (empty($distributionSetting['enabled'])) {
            return $this->render('DistributionPlugin:my:distribution-disable.html.twig');
        }

        if (!$user->isLogin()) {
            return $this->createMessageResponse('error', '用户未登录,请先登录!');
        }

        if (empty($user['inviteCode'])) {
            $user = $this->getUserService()->createInviteCode($user['id']);
        }
        $distribution = $this->getDistributionService()->getByUserId($user['id']);

        if (isset($distributionSetting['distribution_template'])) {
            $site = $this->getSettingService()->get('site', array());

            $registerUrl = $this->generateUrl('register', array('inviteCode' => $user['inviteCode']), true);

            $variables = array(
                'siteName' => $site['name'],
                'registerUrl' => $registerUrl,
            );
            $message = StringToolkit::template($distributionSetting['distribution_template'], $variables);
        }

        $conditions = $request->query->all();
        $conditions['currentId'] = $user['id'];

        $paginator = new Paginator(
            $request, $this->getDistributionService()->countDistributions($conditions), 20
        );
        $distributions = $this->getDistributionService()->searchDistributions(
            $conditions,
            array('id' => 'desc'),
            $paginator->getOffsetCount(),
            $paginator->getPerPageCount()
        );

        $distributionUsers = $this->getUserService()->findUsersByIds(ArrayToolkit::column($distributions, 'userId'));

        return $this->render(
            'DistributionPlugin:My:index.html.twig',
            array(
                'code' => $user['inviteCode'],
                'distribution_template' => $message,
                'distribution' => $distribution,
                'distributions' => $distributions,
                'paginator' => $paginator,
                'distributionUsers' => $distributionUsers,
            )
        );
    }

    public function rewardAction(Request $request)
    {
        $user = $this->getCurrentUser();
        $distributionSetting = $this->getSettingService()->get('plugin_distribution');

        if (empty($distributionSetting['enabled'])) {
            return $this->render('DistributionPlugin:my:distribution-disable.html.twig');
        }

        if (!$user->isLogin()) {
            return $this->createMessageResponse('error', '用户未登录,请先登录!');
        }

        $distribution = $this->getDistributionService()->getByUserId($user['id']);

        $conditions = $request->query->all();
        $conditions['userId'] = $user['id'];
        $paginator = new Paginator(
            $this->get('request'), $this->getRewardService()->countRewards($conditions), 10
        );

        $rewards = $this->getRewardService()->searchRewards(
            $conditions,
            array('id' => 'DESC'),
            $paginator->getOffsetCount(),
            $paginator->getPerPageCount()
        );
        
        $rewardOrders = $this->getRewardService()->findRewardInOrderSn(ArrayToolkit::column($rewards, 'orderSn'));
        
        $users = $this->getUserService()->findUsersByIds(ArrayToolkit::column($rewardOrders, 'userId'));

        return $this->render(
            'DistributionPlugin:My/reward:index.html.twig',
            array(
                'distribution' => $distribution,
                'paginator' => $paginator,
                'rewards' => $rewards,
                'rewardOrders' => $rewardOrders,
                'users' => $users,
            )
        );
    }

    public function withdrawAction(Request $request)
    {
        $user = $this->getCurrentUser();
        $distributionSetting = $this->getSettingService()->get('plugin_distribution');
        $distribution = $this->getDistributionService()->getByUserId($user['id']);

        if (empty($distribution['realname']) && empty($distribution['account'])) {
            return $this->settingAction($request);
            // return $this->render('DistributionPlugin:My/reward:disabled-modal.html.twig');
        }

        if ($request->getMethod() == 'POST') {
            $amount = $request->request->get('amount');
            $amount = $amount * 100;

            if ($amount > $distribution['balance']) {
                return $this->createJsonResponse(array('status' => 'danger', 'message' => '账户余额不足'));
            }
            
            $this->getRewardService()->changeReward($user['id'], $amount, 'extract', null);

            return $this->createJsonResponse(array('status' => 'success', 'message' => '提交申请成功'));
        }

        return $this->render(
            'DistributionPlugin:My/reward:withdraw-modal.html.twig',
            array(
                'distribution' => $distribution,
                'distributionSetting' => $distributionSetting,
            )
        );
    }

    public function settingAction(Request $request)
    {
        $user = $this->getCurrentUser();
        $distributionSetting = $this->getSettingService()->get('plugin_distribution');
        $distribution = $this->getDistributionService()->getByUserId($user['id']);

        if ($request->getMethod() == 'POST') {
            $fields = $request->request->all();
            $this->getDistributionService()->setAccount($distribution['id'], $fields['realname'], $fields['account']);

            return $this->createJsonResponse(array('success' => true, 'message' => '设置成功'));
        }

        return $this->render(
            'DistributionPlugin:My/reward:setting-modal.html.twig',
            array(
                'distribution' => $distribution,
            )
        );
    }

    /**
     * @return UserService
     * */
    protected function getUserService()
    {
        return $this->createService('User:UserService');
    }

    /**
     * @return SettingService
     * */
    protected function getSettingService()
    {
        return $this->createService('System:SettingService');
    }

    /**
     * @return DistributionService
     * */
    protected function getDistributionService()
    {
        return $this->createService('DistributionPlugin:Distribution:DistributionService');
    }

    /**
     * @return RewardService
     * */
    protected function getRewardService()
    {
        return $this->createService('DistributionPlugin:Distribution:RewardService');
    }
}

DefaultController.php

<?php

namespace DistributionPlugin\Controller\AdminV2;

use AppBundle\Controller\Admin\BaseController;
use Biz\System\Service\SettingService;
use Symfony\Component\HttpFoundation\Request;

class DefaultController extends BaseController
{
    public function settingAction(Request $request)
    {
        $distributionSetting = $this->getSettingService()->get('plugin_distribution', array());

        if ($request->getMethod() == 'POST') {
            $fields = $request->request->all();
            $this->getSettingService()->set('plugin_distribution', $fields);
            $this->getLogService()->info('system', 'update_settings', '更新推广设置', $fields);
            $this->setFlashMessage('success', '推广设置已保存!');

            return $this->redirectToRoute('admin_v2_distribution_setting');
        }

        return $this->render(
            'DistributionPlugin:admin-v2:setting.html.twig',
            array(
                'distributionSetting' => $distributionSetting,
            )
        );
    }

    /**
     * @return SettingService
     * */
    protected function getSettingService()
    {
        return $this->createService('System:SettingService');
    }
}

RewardController.php

<?php

namespace DistributionPlugin\Controller\AdminV2;

use AppBundle\Common\ArrayToolkit;
use AppBundle\Common\Paginator;
use AppBundle\Controller\Admin\BaseController;
use Biz\System\Service\SettingService;
use DistributionPlugin\Biz\Distribution\Service\DistributionService;
use DistributionPlugin\Biz\Distribution\Service\RewardService;
use Symfony\Component\HttpFoundation\Request;

class RewardController extends BaseController
{
    public function indexAction(Request $request)
    {
        $conditions = $request->query->all();
        if (!empty($conditions['keywords'])) {
            $user = $this->getUserService()->getUserByLoginField($conditions['keywords']);
            $conditions['userId'] = !empty($user) ? $user['id'] : 0;
        }

        $paginator = new Paginator(
            $this->get('request'), $this->getRewardService()->countRewards($conditions), 10
        );

        $rewards = $this->getRewardService()->searchRewards(
            $conditions,
            array('id' => 'DESC'),
            $paginator->getOffsetCount(),
            $paginator->getPerPageCount()
        );

        $rewardOrders = $this->getRewardService()->findRewardInOrderSn(ArrayToolkit::column($rewards, 'orderSn'));
        if (!empty($rewardOrders)) {
            list($userIds, $fromIds, $toFromIds) = ArrayToolkit::columns($rewardOrders, array('userId', 'fromId', 'toFromId'));
            $userIds = array_merge($userIds, $fromIds, $toFromIds);
            $users = $this->getUserService()->findUsersByIds($userIds);
        } else {
            $users = array();
        }

        $paginator = new Paginator(
            $this->get('request'), $this->getRewardService()->countRewards($conditions), 10
        );

        return $this->render(
            'DistributionPlugin:admin-v2/reward:index.html.twig',
            array(
                'paginator' => $paginator,
                'rewards' => $rewards,
                'rewardOrders' => $rewardOrders,
                'users' => $users,
            )
        );
    }

    public function applyAction(Request $request, $id)
    {
        if ($request->getMethod() == 'POST') {
            $fields = $request->request->all();
            
            $this->getRewardService()->applyReward($id, $fields['status'], $fields['failNote']);

            return $this->createJsonResponse(array('success' => true));
        }

        $reward = $this->getRewardService()->getReward($id);
        $distributionSetting = $this->getSettingService()->get('plugin_distribution', array());
        $distribution = $this->getDistributionService()->getByUserId($reward['userId']);
        $user = $this->getUserService()->getUser($reward['userId']);

        return $this->render('DistributionPlugin:Admin/reward:index-model.html.twig', array(
            'distributionSetting' => $distributionSetting,
            'reward' => $reward,
            'distribution' => $distribution,
            'user' => $user,
        ));
    }

    /**
     * @return DistributionService
     * */
    protected function getDistributionService()
    {
        return $this->createService('DistributionPlugin:Distribution:DistributionService');
    }

    /**
     * @return RewardService
     * */
    protected function getRewardService()
    {
        return $this->createService('DistributionPlugin:Distribution:RewardService');
    }

    /**
     * @return SettingService
     * */
    protected function getSettingService()
    {
        return $this->createService('System:SettingService');
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

linlinlove2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值