diff --git a/plugins/team-dividend/src/admin/TeamAgencyController.php b/plugins/team-dividend/src/admin/TeamAgencyController.php index fcca5c37..61f7849d 100644 --- a/plugins/team-dividend/src/admin/TeamAgencyController.php +++ b/plugins/team-dividend/src/admin/TeamAgencyController.php @@ -152,12 +152,11 @@ class TeamAgencyController extends BaseController */ public function add() { - $level_list = TeamDividendLevelModel::getList()->get(); if (\Request::getMethod() == 'POST') { $agentData = \YunShop::request()->team; $agentData['uniacid'] = \YunShop::app()->uniacid; $agentData['upgrade_at'] = time(); - if((int)$agentData['level'] <= 0) return $this->message('添加失败,请选择代理等级!', '', 'error'); + if((int)$agentData['level'] <= 0 && (int)$agentData['cultural_level_id'] <= 0) return $this->message('添加失败,请选择代理等级!', '', 'error'); try{ TeamDividendAgencyModel::addTeamAgency($agentData); @@ -170,8 +169,12 @@ class TeamAgencyController extends BaseController } + $level_list = TeamDividendLevelModel::getList()->where('level_type',0)->get(); + $cultural_level = TeamDividendLevelModel::getList()->where('level_type',1)->get(); + return view('Yunshop\TeamDividend::admin.team-agency-add', [ - 'level' => $level_list + 'level' => $level_list, + 'cultural_level' => $cultural_level ])->render(); } @@ -327,7 +330,7 @@ class TeamAgencyController extends BaseController // $set = \Setting::get('plugin.team_dividend'); // (new NewUpgrateJob($model->uid, $set, $model->uniacid, TeamDividendLevelUpgrade::ORDER_PAY, $model))->handle(); - // $order = Order::find(169); + // $order = Order::find(3); // $TeamReturnService = ReturnConfig::getClass(); // if (app('plugins')->isEnabled('team-sideways')) debug('经销商订单创建终止:team-sideways'); // $set = $order->getSetting('plugin.team_dividend'); @@ -339,12 +342,7 @@ class TeamAgencyController extends BaseController // $TeamReturnService->setData($order, $set, $buyMember, $order_goods, $agents); // $TeamReturnService->handle(); // $this->totalDividend += $TeamReturnService->totalDividend; - // // 文创津贴(补贴)处理 - // $TeamReturnService->setData($order, $set, $buyMember, $order_goods, $agents,1); - // $TeamReturnService->handle(); - // $this->totalDividend += $TeamReturnService->totalDividend; // } - // debug(['总分红金额(包括津贴和补贴)'=>$this->totalDividend]); debug("结束"); } diff --git a/plugins/team-dividend/src/models/GoodsTeamDividend.php b/plugins/team-dividend/src/models/GoodsTeamDividend.php index cd19b3a7..a1f8d683 100644 --- a/plugins/team-dividend/src/models/GoodsTeamDividend.php +++ b/plugins/team-dividend/src/models/GoodsTeamDividend.php @@ -18,18 +18,17 @@ class GoodsTeamDividend extends BaseModel public $timestamps = true; protected $guarded = ['']; public $attributes = [ - 'is_dividend' => 1, - 'is_hierarchy' => 1, - 'is_restrict' => 0, - 'has_dividend' => 0, + 'is_dividend' => 1, + 'is_hierarchy' => 1, + 'is_restrict' => 0, + 'has_dividend' => 0, 'has_dividend_price' => 0, - 'has_dividend_rate' => 0, + 'has_dividend_rate' => 0, + 'commission_rates' => 0 ]; - public static function getGoodsByGoodsId($giidsId) - { - return self::where('goods_id', $giidsId) - ->where('is_dividend', '1'); + public static function getGoodsByGoodsId($giidsId){ + return self::where('goods_id', $giidsId)->where('is_dividend', '1'); } public static function relationSave($goodsId, $data, $operate) @@ -65,6 +64,7 @@ class GoodsTeamDividend extends BaseModel $data['has_dividend_rates'] = $data['has_dividend_rates'] ? serialize($data['has_dividend_rates']) : ''; $data['has_hierarchys'] = serialize($data['has_hierarchys']); $data['has_dividend_extra'] = $data['has_dividend_extra'] ? serialize($data['has_dividend_extra']) : ''; + $data['commission_rates'] = $data['commission_rates'] ? serialize($data['commission_rates']) : ''; $dividendModel->setRawAttributes($data); return $dividendModel->save(); } diff --git a/plugins/team-dividend/src/models/TeamDividendAgencyModel.php b/plugins/team-dividend/src/models/TeamDividendAgencyModel.php index 4af67d70..913c0276 100644 --- a/plugins/team-dividend/src/models/TeamDividendAgencyModel.php +++ b/plugins/team-dividend/src/models/TeamDividendAgencyModel.php @@ -173,9 +173,9 @@ class TeamDividendAgencyModel extends BackendModel { return self::uniacid() ->with(['hasOneLevel'=>function($query){ - $query->select(['id','award_gratitude','award_ratio','dividend_ratio','level_weight']); + // $query->select(['id','award_gratitude','award_ratio','dividend_ratio','level_weight','level_type','commission_ratio']); },'culturalLevel'=>function($query){ - $query->select(['id','award_gratitude','award_ratio','dividend_ratio','level_weight']); + // $query->select(['id','award_gratitude','award_ratio','dividend_ratio','level_weight','level_type','commission_ratio']); }]) ->where('uid', $uid) ->first(); diff --git a/plugins/team-dividend/src/models/TeamDividendModel.php b/plugins/team-dividend/src/models/TeamDividendModel.php index edd6d35d..132474a3 100644 --- a/plugins/team-dividend/src/models/TeamDividendModel.php +++ b/plugins/team-dividend/src/models/TeamDividendModel.php @@ -201,10 +201,13 @@ class TeamDividendModel extends BaseModel $this->TypeService = '额外分红'; break; case 4: - $this->TypeService = '津贴(补贴)'; + $this->TypeService = '生态建设'; break; case 5: - $this->TypeService = '津贴(补贴)平级奖'; + $this->TypeService = '生态贡献'; + break; + case 6: + $this->TypeService = '生态服务'; break; } } @@ -472,7 +475,7 @@ class TeamDividendModel extends BaseModel * Author: wu-hui * Time: 2023/11/20 15:15 * @param int $uid 用户id - * @param int $type 4=服务收益,5=贡献收益 + * @param int $type 4=生态建设,5=生态贡献,6=生态服务 * @param string $incomeStatus all=全部收益;undrawn=未提现收益,withdrawn=已提现收益 * @return mixed */ diff --git a/plugins/team-dividend/src/services/GetAmountService.php b/plugins/team-dividend/src/services/GetAmountService.php index 124290bb..771aa58f 100644 --- a/plugins/team-dividend/src/services/GetAmountService.php +++ b/plugins/team-dividend/src/services/GetAmountService.php @@ -37,7 +37,7 @@ class GetAmountService * @param $finish_price * @param $dividendType */ - public function __construct($agent, $order, $order_goods, $set, $team_goods, $finish_ratio, $finish_price, $dividendType = 0) + public function __construct($agent, $order, $order_goods, $set, $team_goods, $finish_ratio, $finish_price, $dividendType = 0,$finish_ratio_service = 0) { $this->dividendType = $dividendType; $this->agent = $agent; @@ -46,6 +46,7 @@ class GetAmountService $this->set = $set; $this->team_goods = $team_goods; $this->finish_ratio = $finish_ratio; + $this->finish_ratio_service = $finish_ratio_service; $this->finish_price = $finish_price; } @@ -59,6 +60,11 @@ class GetAmountService return unserialize($this->team_goods->has_dividend_rates); } + private function getCommissionRates() + { + return unserialize($this->team_goods->commission_rates); + } + /** * @name 商品独立设置-固定金额-解序列化 * @author @@ -305,7 +311,8 @@ class GetAmountService } return $ratio; - } else { + } + else { // 商城商品设置奖励比例 else 商城商品设置奖励固定金额 if ($this->hasDividendRates()) { $dividend_rates = $this->getDividendRates(); @@ -314,7 +321,9 @@ class GetAmountService return $ratio; } } - } else { + } + else { + // 基础设置 if($this->dividendType == 1){ $ratio = bcsub($this->agent['cultural_level']['dividend_ratio'], $this->finish_ratio,2); $this->finish_ratio = $this->agent['cultural_level']['dividend_ratio']; @@ -326,11 +335,53 @@ class GetAmountService } } + // 获取生态服务比例 + public function getServiceRatio(){ + // 商品独立设置 else 基础设置 + if($this->hasDividend()){ + // 收银台商品 与 存在独立奖励设置 else 商城 + if($this->hasDividendRate()){ + // 经销商奖励比例 - 下级经销商奖励比例 = 奖励比例 + if($this->dividendType == 1){ + $ratio = bcsub($this->agent['cultural_level']['commission_ratio'],$this->finish_ratio_service,2); + $this->finish_ratio_service = $this->agent['cultural_level']['commission_ratio']; + } + else{ + $ratio = bcsub($this->agent['has_one_level']['commission_ratio'],$this->finish_ratio_service,2); + $this->finish_ratio_service = $this->agent['has_one_level']['commission_ratio']; + } + return $ratio; + } + else{ + // 商城商品设置奖励比例 else 商城商品设置奖励固定金额 + if($this->hasDividendRates()){ + $dividend_rates = $this->getCommissionRates(); + $ratio = bcsub($dividend_rates['level_'.($this->dividendType == 1 ? $this->agent['cultural_level_id'] : $this->agent['level'])],$this->finish_ratio_service,2); + $this->finish_ratio_service = $dividend_rates['level_'.($this->dividendType == 1 ? $this->agent['cultural_level_id'] : $this->agent['level'])]; + return $ratio; + } + } + } + else{ + // 基础设置 + if($this->dividendType == 1){ + $ratio = bcsub($this->agent['cultural_level']['commission_ratio'],$this->finish_ratio_service,2); + $this->finish_ratio_service = $this->agent['cultural_level']['commission_ratio']; + } + else{ + $ratio = bcsub($this->agent['has_one_level']['commission_ratio'],$this->finish_ratio_service,2); + $this->finish_ratio_service = $this->agent['has_one_level']['commission_ratio']; + } + return $ratio; + } + } + + + /** * 获取最大奖励 */ - public function getTotalDividend() - { + public function getTotalDividend(){ $maxRatio = max(TeamDividendLevelModel::uniacid()->select('dividend_ratio')->get()->toArray()); if ($this->hasDividend()) { @@ -365,4 +416,13 @@ class GetAmountService } + + + + + + + + + } \ No newline at end of file diff --git a/plugins/team-dividend/src/services/TeamReturnService.php b/plugins/team-dividend/src/services/TeamReturnService.php index bda1afaf..f9c6f48b 100644 --- a/plugins/team-dividend/src/services/TeamReturnService.php +++ b/plugins/team-dividend/src/services/TeamReturnService.php @@ -33,6 +33,8 @@ class TeamReturnService private $lower_ratio = 0; // 已获得奖励的比例 private $finish_ratio = 0; + // 已获得服务奖励的比例 + private $finish_ratio_service = 0; // 已完成的经销商奖励 用于感恩奖 private $finish_team_award_amount = 0; // 已奖励金额 用于计算极差 @@ -59,9 +61,9 @@ class TeamReturnService protected $flat_prize_limit; - private $dividendType = 0;// 分红类型:0=普通经销商提成,1=文创经销商津贴(补贴) - + private $dividendType = 0;// 分红类型:0=普通经销商提成,1=文创经销商生态建设 + private $upUserDividendAmount = 0;// 上一位用户的经销商佣金提成金额 只有存在佣金时才会刷新该数据,如果用户为领取佣金则该金额保留 直到某位用户获取佣金为止 public function setData($order, $set, $buyMember, $order_goods, $agents){ $this->order = $order; @@ -93,7 +95,7 @@ class TeamReturnService private function running(){ foreach ($this->agents as $agent) { - $this->amount_service = new GetAmountService($agent, $this->order, $this->order_goods, $this->set, $this->team_goods, $this->finish_ratio, $this->finish_price, $this->dividendType); + $this->amount_service = new GetAmountService($agent, $this->order, $this->order_goods, $this->set, $this->team_goods, $this->finish_ratio, $this->finish_price, $this->dividendType, $this->finish_ratio_service); //商品分红限制 不计入平级奖层级 不算感恩奖 if ($agent['is_black'] || $this->getIsRestrict($agent)) { continue; @@ -117,9 +119,9 @@ class TeamReturnService private function totalDividend() { - $amount_service = new GetAmountService('', $this->order, $this->order_goods, $this->set, $this->team_goods, $this->finish_ratio, $this->finish_price); + $amount_service = new GetAmountService('', $this->order, $this->order_goods, $this->set, $this->team_goods, $this->finish_ratio, $this->finish_price,$this->dividendType,$this->finish_ratio_service); // 经销商奖励总金额 不包括感恩奖和平级奖 - $this->totalDividend = $amount_service->getTotalDividend(); + $this->totalDividend += $amount_service->getTotalDividend(); } // 感恩奖 @@ -205,7 +207,7 @@ class TeamReturnService return; } - + $this->upUserDividendAmount = $dividend_amount; // 计算基数 $amount = $this->amount_service->amount; @@ -218,7 +220,6 @@ class TeamReturnService ]; // 分红 $dividend_model = $this->addDividend($agent, $dividendData); - $member = Member::getMemberByUid($agent['uid'])->with('hasOneFans')->first(); $notice = [ 'lower_level_name' => $this->buyMember->nickname, @@ -243,6 +244,61 @@ class TeamReturnService } // 属性赋值 $this->setAttributeTheValue($dividendData['dividend_amount'], $agent); + + // 生态服务 + if($this->dividendType == 1) $this->dividendAwardService($agent); + } + + // 生态服务 + private function dividendAwardService($agent){ + // 生态服务比例 + $ratio = $this->amount_service->getServiceRatio(); + // 生态服务金额 + $dividend_amount = $this->amount_service->getDividendAmount($ratio); + if($dividend_amount <= 0) return; + // 计算基数 + $amount = $this->amount_service->amount; + $dividendData = [ + 'dividend_amount' => $dividend_amount, + 'type' => 6, + 'amount' => $amount, + 'dividend_rate' => $ratio, + 'lower_level_rate' => $this->finish_ratio_service ?: 0 + ]; + // 生态服务 + $dividend_model = $this->addDividend($agent,$dividendData); + $member = Member::getMemberByUid($agent['uid'])->with('hasOneFans')->first(); + $notice = [ + 'lower_level_name' => $this->buyMember->nickname, + 'order_amount' => $this->order->price, + 'amount' => $dividendData['amount'], + 'dividendRate' => $ratio, + 'rate' => $this->finish_ratio_service, + 'dividend_amount' => $dividendData['dividend_amount'], + 'order_sn' => $this->order->order_sn, + 'dividend_id' => $dividend_model ? $dividend_model->id : 0, + ]; + if($this->set['notice_event'] == 1){ + NoticeLog::create([ + 'uniacid' => \YunShop::app()->uniacid, + 'uid' => $agent['uid'], + 'order_id' => $this->order->id, + 'type' => $dividendData['type'], + 'notice_data' => json_encode($notice), + ]); + } + else{ + MessageService::dividendOrder($notice,$member->hasOneFans); + } + // 属性赋值 + $this->finish_ratio_service = $this->amount_service->finish_ratio_service; + //保存已获得分红的分红金额 感恩奖触发就清0 + $this->finish_team_award_amount = $dividend_amount; + //保存已获得分红的分红金额 (ps:上级是固定金额 减去 该金额) + $this->finish_price = $this->amount_service->amount; + // 获得奖励的UID + $this->award_uid = $agent['uid']; + $this->obtainInfos[$this->dividendType == 1 ? $agent['cultural_level_id'] : $agent['level']] = $dividend_amount; } // 平级奖 @@ -267,15 +323,17 @@ class TeamReturnService // 平级奖奖励比例 $award_ratio = $this->amount_service->getAwardHierarchyRatio(); - if (!isset($award_ratio) || $award_ratio <= 0) { - return; - } - $amount = $this->amount_service->getAwardHierarchyAmount(); - if ($amount <= 0) { - return; + if (!isset($award_ratio) || $award_ratio <= 0) return; + // 计算结算金额 普通经销商为订单金额,文创经销商为上一位的分红佣金 + if($this->dividendType == 1){ + // 文创等级 使用上一位的分红佣金 + $amount = $this->upUserDividendAmount; + }else{ + // 普通等级 使用订单金额 + $amount = $this->amount_service->getAwardHierarchyAmount(); } + if ($amount <= 0) return; $dividend_amount = proportionMath($amount, $award_ratio); - $dividendData = [ 'amount' => $amount, 'dividend_rate' => $award_ratio, @@ -476,9 +534,8 @@ class TeamReturnService 'culate_method' => intval($this->set['culate_method']) ?: 0, 'created_at' => time(), ]; - // 判断:如果当前是 文创津贴(补贴) 修改对应的类型值 - if($this->dividendType == 1) $dividendData['type'] = $dividendData['type'] == 1 ? 5 : 4; - + // 判断:如果当前是 文创生态建设 修改对应的类型值 + if($this->dividendType == 1 && $dividendData['type'] < 6) $dividendData['type'] = $dividendData['type'] == 1 ? 5 : 4; //取小数点后两位数四舍五入 例如设置独立金额0.003元 if (round($dividendData['dividend_amount'], 2) <= 0) return; @@ -566,5 +623,9 @@ class TeamReturnService $this->extraCount = 0; // 获得经销商奖励的等级id与金额 $this->obtainInfos = []; + // 上一位获取的佣金 只有存在新佣金时才会刷新,否则不刷新 + $this->upUserDividendAmount = 0; + // 已获得生态服务奖励的比例 + $this->finish_ratio_service = 0; } } \ No newline at end of file diff --git a/plugins/team-dividend/src/widgets/DividendVueWidget.php b/plugins/team-dividend/src/widgets/DividendVueWidget.php index e9afd5f5..c3b313a9 100644 --- a/plugins/team-dividend/src/widgets/DividendVueWidget.php +++ b/plugins/team-dividend/src/widgets/DividendVueWidget.php @@ -31,16 +31,17 @@ class DividendVueWidget extends BaseGoodsWidget $item['has_dividend_rates'] = unserialize($item['has_dividend_rates']); $item['has_hierarchys'] = unserialize($item['has_hierarchys']); $item['has_dividend_extra'] = unserialize($item['has_dividend_extra']); + $item['commission_rates'] = unserialize($item['commission_rates']); $dividendLevel = TeamDividendLevelModel::getList()->get()->toArray(); foreach ($dividendLevel as $key=>$value) { $dividendLevel[$key]['has_dividend_rates'] = isset($item['has_dividend_rates']['level_'.$value['id']])?$item['has_dividend_rates']['level_'.$value['id']]:''; //提成比例百分比 $dividendLevel[$key]['has_dividend_prices'] = isset($item['has_dividend_prices']['level_'.$value['id']])?$item['has_dividend_prices']['level_'.$value['id']]:''; //提成比例固定 $dividendLevel[$key]['has_dividend_extra'] = isset($item['has_dividend_extra']['level_'.$value['id']])?$item['has_dividend_extra']['level_'.$value['id']]:''; //提成比例-额外奖励 + $dividendLevel[$key]['commission_rates'] = isset($item['commission_rates']['level_'.$value['id']])?$item['commission_rates']['level_'.$value['id']]:''; // $dividendLevel[$key]['hierarchy'] = isset($item['has_hierarchys'][$value['id']]['hierarchy'])?$item['has_hierarchys'][$value['id']]['hierarchy']:''; //提成比例-额外奖励 $dividendLevel[$key]['ratio'] = isset($item['has_hierarchys'][$value['id']]['ratio'])?$item['has_hierarchys'][$value['id']]['ratio']:''; //提成比例-额外奖励 - } $data['teamSet'] = $set; diff --git a/plugins/team-dividend/src/widgets/DividendWidget.php b/plugins/team-dividend/src/widgets/DividendWidget.php index 856e12df..0ceca70c 100644 --- a/plugins/team-dividend/src/widgets/DividendWidget.php +++ b/plugins/team-dividend/src/widgets/DividendWidget.php @@ -18,6 +18,7 @@ class DividendWidget extends Widget $item['has_dividend_rates'] = unserialize($item['has_dividend_rates']); $item['has_hierarchys'] = unserialize($item['has_hierarchys']); $item['has_dividend_extra'] = unserialize($item['has_dividend_extra']); + $item['commission_rates'] = unserialize($item['commission_rates']); $dividendLevel = TeamDividendLevelModel::getList()->get()->toArray(); return view('Yunshop\TeamDividend::admin.goods', [ diff --git a/plugins/team-dividend/views/admin/dividend-list.blade.php b/plugins/team-dividend/views/admin/dividend-list.blade.php index caf9305b..21a7fcb8 100644 --- a/plugins/team-dividend/views/admin/dividend-list.blade.php +++ b/plugins/team-dividend/views/admin/dividend-list.blade.php @@ -65,8 +65,9 @@ - - + + + @@ -130,33 +131,33 @@
| ID | -提成时间 | -会员ID | -订单号 | -经销商 | -经销商等级 分红类型 / 分红比例 |
- 订单金额 | -提成结算金额 | -下级经销商提成 | -提成金额 | -提成状态 | -操作 | +ID | +提成时间 | +会员ID | +订单号 | +经销商 | +经销商等级 分红类型 / 分红比例 |
+ 订单金额 | +提成结算金额 | +下级经销商提成 | +提成金额 | +提成状态 | +操作 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{$row['id']}} | -{{$row['created_at']}} | -{{$row['member_id']}} | -+ | {{$row['id']}} | +{{$row['created_at']}} | +{{$row['member_id']}} | +{{$row['order_sn']}} | -+ |
|
- + |
{{$row['level_name']}}
{{ $row['type_name'] }} - 比例:{{$row['dividend_rate']}}% |
- {{$row['order_amount']}} | -{{$row['amount']}} | -{{$row['lower_level_rate']}}% | -{{$row['dividend_amount']}} | -{{$row['status_name']}} | -+ | {{$row['order_amount']}} | +{{$row['amount']}} | +{{$row['lower_level_rate']}}% | +{{$row['dividend_amount']}} | +{{$row['status_name']}} | +查看详情 |
| 经销商等级 | -提成比例 | +提成比例/生态建设比例 | +生态服务比例 | @if( $teamSet['is_extra_award'] )额外奖励 | @endif @@ -81,34 +82,38 @@
-
+
% 固定
-
+
元
|
+
+
+
+
+ %
+ |
@if( $teamSet['is_extra_award'] )
-
-
-
-
- 元
- |
+
+
+
+
+ 元
+ |
@endif