From 2063eefa870819a42e437f9e36291676e8c262e7 Mon Sep 17 00:00:00 2001 From: wuhui_zzw <1760308791@qq.com> Date: Wed, 22 Nov 2023 11:04:57 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=9A=E8=82=A1=E4=B8=9C?= =?UTF-8?q?=E5=88=86=E7=BA=A2=E6=B7=BB=E5=8A=A0=E6=94=B6=E7=9B=8A=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=20=E4=BF=AE=E6=94=B9=EF=BC=9A=E8=82=A1=E4=B8=9C?= =?UTF-8?q?=E5=88=86=E7=BA=A2=E5=92=8C=E5=8A=A0=E6=9D=83=E6=94=B6=E7=9B=8A?= =?UTF-8?q?=E7=9A=84=E6=8F=90=E7=8E=B0=E5=88=86=E5=BC=80=20=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=EF=BC=9A=E6=96=87=E5=88=9B=E7=A9=BA=E9=97=B4=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E5=8A=A0=E6=9D=83=E6=94=B6=E7=9B=8A=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controllers/IncomeWithdrawController.php | 67 ++- .../src/models/CulturalSpace.php | 9 +- .../src/PluginApplication.php | 24 +- .../src/models/ShareholderDividendModel.php | 26 + .../src/services/TimedTaskService.php | 4 +- .../views/admin/tpl/aingle-dividend.blade.php | 464 +++++++++--------- 6 files changed, 333 insertions(+), 261 deletions(-) diff --git a/app/frontend/modules/finance/controllers/IncomeWithdrawController.php b/app/frontend/modules/finance/controllers/IncomeWithdrawController.php index 435b0b1d..a6757561 100644 --- a/app/frontend/modules/finance/controllers/IncomeWithdrawController.php +++ b/app/frontend/modules/finance/controllers/IncomeWithdrawController.php @@ -18,6 +18,7 @@ use app\common\services\finance\IncomeService; use app\framework\Database\Eloquent\Collection; use app\frontend\modules\finance\models\Withdraw; use app\frontend\modules\member\models\MemberBankCard; +use Yunshop\ShareholderDividend\models\ShareholderDividendModel; use Yunshop\ShopEsignV2\common\models\BaseSetting; use Yunshop\ShopEsignV2\common\models\Company; use Yunshop\ShopEsignV2\common\models\Scene; @@ -465,32 +466,54 @@ class IncomeWithdrawController extends ApiController * @return array */ private function getItemData($key, $income){ + $uid = \YunShop::app()->getMemberId(); + $amountList = []; + + // 获取佣金信息 if($income['type'] == 'teamDividend'){ // 普通经销商佣金 - $this->withdraw_amounts = Income::uniacid() + $amountList = Income::uniacid() + ->select(['yz_member_income.id','yz_member_income.amount']) ->leftJoin('yz_team_dividend','yz_team_dividend.id','yz_member_income.incometable_id') ->where('yz_member_income.incometable_type', $income['class']) ->where('yz_member_income.status', Income::STATUS_INITIAL) - ->where('yz_member_income.member_id', \YunShop::app()->getMemberId()) + ->where('yz_member_income.member_id', $uid) ->whereNotIn('yz_team_dividend.type', [4,5]) - ->sum('yz_member_income.amount'); - }else if($income['type'] == 'teamDividendCultural'){ + ->get()->toArray(); + } + else if($income['type'] == 'teamDividendCultural'){ // 文创经销商补贴 仅查询一个月前的未提现金额 $startTime = strtotime(date("Y-m-1"));// 本月1号0点 - $this->withdraw_amounts = Income::uniacid() + $amountList = Income::uniacid() + ->select(['yz_member_income.id','yz_member_income.amount']) ->leftJoin('yz_team_dividend','yz_team_dividend.id','yz_member_income.incometable_id') ->where('yz_member_income.incometable_type', $income['class']) ->where('yz_member_income.status', Income::STATUS_INITIAL) - ->where('yz_member_income.member_id', \YunShop::app()->getMemberId()) + ->where('yz_member_income.member_id', $uid) ->where('yz_member_income.created_at', '<',$startTime) ->whereIn('yz_team_dividend.type', [4,5]) - ->sum('yz_member_income.amount'); - }else{ - $this->withdraw_amounts = $this->getIncomeModel()->where('incometable_type', $income['class'])->sum('amount'); + ->get()->toArray(); } + else if($income['type'] == 'shaerholderDividend'){ + // 股东分红 - 股东分红 + $amountList = ShareholderDividendModel::getIncome((int)$uid,(int)0,'undrawn') + ->select(['yz_member_income.id','yz_member_income.amount']) + ->get()->toArray(); + } + else if($income['type'] == 'weight_income'){ + // 股东分红 - 加权收益 + $amountList = ShareholderDividendModel::getIncome((int)$uid,(int)1,'undrawn') + ->select(['yz_member_income.id','yz_member_income.amount']) + ->get()->toArray(); + }else{ + $amountList = $this->getIncomeModel()->select(['id','amount'])->where('incometable_type', $income['class'])->get()->toArray(); + } + $this->withdraw_amounts = sprintf("%.2f",array_sum(array_column($amountList,'amount'))); + $withdraw_amounts_ids = implode(',',array_column($amountList,'id')); + + $can = $this->incomeIsCanWithdraw(); - if ($income['type'] == 'commission') { $max = $this->getWithdrawLog($income['class']); $commission_is_can_withdraw = $this->commissionIsCanWithdraw($max); @@ -545,7 +568,7 @@ class IncomeWithdrawController extends ApiController 'max_time_out_limit' => $this->getIncomeTimeMax(), 'can' => $can, 'selected' => $this->incomeIsCanWithdraw(), - 'type_id' => $this->getIncomeTypeIds($income['class']), + 'type_id' => $can ? $withdraw_amounts_ids : '', 'special_poundage' => $special_poundage, 'special_poundage_rate' => $this->special_poundage_rate, 'special_service_tax' => $special_service_tax, @@ -670,17 +693,17 @@ class IncomeWithdrawController extends ApiController * 获取 item 对应 id 集 * @return string */ - private function getIncomeTypeIds($income_class) - { - if ($this->incomeIsCanWithdraw()) { - $type_ids = ''; - foreach ($this->getIncomeModel()->where('incometable_type', $income_class)->get() as $ids) { - $type_ids .= $ids->id . ","; - } - return $type_ids; - } - return ''; - } + // private function getIncomeTypeIds($income_class) + // { + // if ($this->incomeIsCanWithdraw()) { + // $type_ids = ''; + // foreach ($this->getIncomeModel()->where('incometable_type', $income_class)->get() as $ids) { + // $type_ids .= $ids->id . ","; + // } + // return $type_ids; + // } + // return ''; + // } diff --git a/plugins/cultural-space/src/models/CulturalSpace.php b/plugins/cultural-space/src/models/CulturalSpace.php index 03a397df..21ec7592 100644 --- a/plugins/cultural-space/src/models/CulturalSpace.php +++ b/plugins/cultural-space/src/models/CulturalSpace.php @@ -7,6 +7,7 @@ use app\common\models\member\MemberParent; use app\common\models\Order; use app\common\models\OrderGoods; use Illuminate\Support\Facades\DB; +use Yunshop\ShareholderDividend\models\ShareholderDividendModel; use Yunshop\TeamDividend\admin\models\MemberChild; use Yunshop\TeamDividend\models\TeamDividendAgencyModel; use Yunshop\TeamDividend\models\TeamDividendModel; @@ -329,9 +330,8 @@ class CulturalSpace extends BaseModel $legumesIncome = sprintf("%.2f",$culturalSpace['voucher_number'] * $exchangeRate); // 获取小区业绩(去除最大的线的业绩)和团队总业绩 $teamAmount = $this->getTeamOrderAmount($uid); - - - + // 获取加权收益 + $weightIncome = ShareholderDividendModel::getIncome((int)$uid,(int)1)->sum('yz_member_income.amount'); // $isPartner = 0; $list = [ @@ -343,7 +343,8 @@ class CulturalSpace extends BaseModel 'contribution_value' => ['key_name' => 'contribution_value','title' => '贡献值','num' => $culturalSpace['contribution'],'sort' => 5], 'area_performance' => ['key_name' => 'area_performance','title' => '小区业绩','num' => $teamAmount['team_amount'],'sort' => 7], 'team_performance' => ['key_name' => 'service_revenue','title' => '团队总业绩','num' => $teamAmount['area_amount'],'sort' => 8], - 'weight_income' => ['key_name' => 'weight_income','title' => '加权收益','num' => 0,'sort' => 9], + 'weight_income' => ['key_name' => 'weight_income','title' => '加权收益','num' => $weightIncome,'sort' => 9], + 'shareholding_income' => ['key_name' => 'weight_income','title' => '股权收益','num' => 0,'sort' => 10], ]; // 合伙人等级增加显示加权收益,不显示服务收益、贡献收益、贡献值分红 // if($isPartner) unset($list['service_income'],$list['contribution_income'],$list['contribution_bonus']); diff --git a/plugins/shareholder-dividend/src/PluginApplication.php b/plugins/shareholder-dividend/src/PluginApplication.php index f01b82a9..a1d0d5a1 100644 --- a/plugins/shareholder-dividend/src/PluginApplication.php +++ b/plugins/shareholder-dividend/src/PluginApplication.php @@ -22,15 +22,23 @@ class PluginApplication extends \app\common\services\PluginApplication ]; } - public function getIncomeItems() - { - return ['shaerholderDividend' => [ - 'title' => SHAREHOLDER_DIVIDEND_CUSTOM_NAME, - 'type' => 'shaerholderDividend', - 'type_name' => SHAREHOLDER_DIVIDEND_CUSTOM_NAME, - 'class' => 'Yunshop\ShareholderDividend\models\ShareholderDividendModel', - ]]; + public function getIncomeItems(){ + return [ + 'shaerholderDividend' => [ + 'title' => SHAREHOLDER_DIVIDEND_CUSTOM_NAME, + 'type' => 'shaerholderDividend', + 'type_name' => SHAREHOLDER_DIVIDEND_CUSTOM_NAME, + 'class' => 'Yunshop\ShareholderDividend\models\ShareholderDividendModel', + ], + 'weight_income' => [ + 'title' => '加权收益', + 'type' => 'weight_income', + 'type_name' => '加权收益', + 'class' => 'Yunshop\ShareholderDividend\models\ShareholderDividendModel', + ] + + ]; } protected function setConfig() diff --git a/plugins/shareholder-dividend/src/models/ShareholderDividendModel.php b/plugins/shareholder-dividend/src/models/ShareholderDividendModel.php index 9ecc8c8b..155f9183 100644 --- a/plugins/shareholder-dividend/src/models/ShareholderDividendModel.php +++ b/plugins/shareholder-dividend/src/models/ShareholderDividendModel.php @@ -49,4 +49,30 @@ class ShareholderDividendModel extends BackendModel { return $this->hasOne('app\common\models\Member', 'uid', 'member_id'); } + /** + * Common: 获取用户某个类型的收益 + * Author: wu-hui + * Time: 2023/11/22 10:06 + * @param int $uid 用户id + * @param int $incomeType 收益类型:0=股权分红,1=加权收益 + * @param string $incomeStatus all=全部收益;undrawn=未提现收益,withdrawn=已提现收益 + * @return mixed + */ + public static function getIncome(int $uid,int $incomeType,string $incomeStatus = 'all'){ + return self::uniacid() + ->leftJoin('yz_member_income', function ($join) { + $join->on('yz_member_income.member_id', 'yz_shareholder_dividend.member_id')->on('yz_member_income.incometable_id', 'yz_shareholder_dividend.id'); + }) + ->where('yz_member_income.dividend_code',64) + ->where('yz_shareholder_dividend.income_type',$incomeType) + ->where('yz_shareholder_dividend.member_id',$uid) + ->when($incomeStatus != 'all',function($query) use ($incomeStatus){ + $query->where('yz_member_income.status',$incomeStatus == 'undrawn' ? 0 : 1); + }); + } + + + + + } diff --git a/plugins/shareholder-dividend/src/services/TimedTaskService.php b/plugins/shareholder-dividend/src/services/TimedTaskService.php index edc63370..3c900dca 100644 --- a/plugins/shareholder-dividend/src/services/TimedTaskService.php +++ b/plugins/shareholder-dividend/src/services/TimedTaskService.php @@ -327,7 +327,8 @@ class TimedTaskService // 循环处理 foreach ($teamLevels as $teamLevel) { // 判断:结算方式是否符合条件 - $levelSettlementType = (int)$this->set['level_settlement_type']['level_' . $teamLevel['id']]; + $levelSettlementType = (int)$this->set['level_settlement_type']['level_' . $teamLevel['id']];// 结算方式 0=周期,1=订单支付后 + $incomeType = (int)$this->set['income_type']['level_' . $teamLevel['id']];// 收益类型 0=股东分红,1=加权收益 $rate = (float)$this->set['level_rate']['level_' . $teamLevel['id']]; // 等级分红比例 if ($rate > 0 && (($settlementType == 'cycle' && $levelSettlementType == 0) || ($settlementType == 'order' && $levelSettlementType == 1))) { $levelBonusType = (float)$this->set['level_bonus_type']['level_' . $teamLevel['id']]; // 分红方式:0=按权重值比例,1=平均分 @@ -432,6 +433,7 @@ class TimedTaskService 'weight_value_rate' => $weightValueRate ?? 0,// 分红时当前用户持有当前等级的权重值比例 'order_id' => $orderId ?? 0,// 订单id(仅结算类型为订单才有) 'settlement_type' => $levelSettlementType ?? 0,// 结算类型 + 'income_type' => $incomeType ?? 0,// 收益类型 ]; $shareholderDividendModel = new ShareholderDividendModel(); diff --git a/plugins/shareholder-dividend/views/admin/tpl/aingle-dividend.blade.php b/plugins/shareholder-dividend/views/admin/tpl/aingle-dividend.blade.php index 9afa9d64..9383d542 100644 --- a/plugins/shareholder-dividend/views/admin/tpl/aingle-dividend.blade.php +++ b/plugins/shareholder-dividend/views/admin/tpl/aingle-dividend.blade.php @@ -1,244 +1,256 @@ -