diff --git a/app/common/repositories/store/platformCommission/LegumesRepository.php b/app/common/repositories/store/platformCommission/LegumesRepository.php index aea9ff3..e3440b4 100644 --- a/app/common/repositories/store/platformCommission/LegumesRepository.php +++ b/app/common/repositories/store/platformCommission/LegumesRepository.php @@ -32,18 +32,20 @@ class LegumesRepository extends BaseRepository{ // 获取周期时间 [$startTime,$endTime] = getTimeStamp('yesterday');// 天 // 获取周期内基金池金额 - $totalIntegralReleaseMoney = (float)app()->make(RecordRepository::class)->getTotalIntegralReleaseMoney($startTime,$endTime); - if($totalIntegralReleaseMoney <= 0) throw new Exception('基金池金额为0'); + [$totalIntegralReleaseMoney,$refundMoney,$realityMoney] = app()->make(RecordRepository::class)->getTotalIntegralReleaseMoney($startTime,$endTime); + if($realityMoney <= 0) throw new Exception('基金池金额为0'); $legumesPrice = $set['legumes_price'] <= 0 ? 0.5 : $set['legumes_price']; // 计算豆豆数量 文创豆=平台抽成的销售额10%➗首次价格0.5 - $legumesNum = (float)sprintf("%.2f",$totalIntegralReleaseMoney / $legumesPrice); + $legumesNum = (float)sprintf("%.2f",$realityMoney / $legumesPrice); // 明日价格 下次文创豆价格=基金池金额(消费者的70%)➗ 文创豆数量 - $allIntegralReleaseMoney = (float)app()->make(RecordRepository::class)->getTotalIntegralReleaseMoney(); + [$allTotalIntegralReleaseMoney,$allRefundMoney,$allRealityMoney] = app()->make(RecordRepository::class)->getTotalIntegralReleaseMoney(); $allLegumes = (float)$this->dao->getSearch([])->sum('legumes_num'); - $tomorrowLegumesPrice = sprintf("%.2f",$allIntegralReleaseMoney / ($allLegumes + $legumesNum)); + $tomorrowLegumesPrice = sprintf("%.2f",$allRealityMoney / ($allLegumes + $legumesNum)); // 记录 $recordId = Legumes::insertGetId([ 'total_platform_commission_money' => $totalIntegralReleaseMoney, + 'refund_money' => $refundMoney, + 'reality_money' => $realityMoney, 'legumes_price' => $legumesPrice, 'legumes_num' => $legumesNum, 'tomorrow_legumes_price' => $tomorrowLegumesPrice, diff --git a/app/common/repositories/store/platformCommission/PartnerSettlementCycleRepository.php b/app/common/repositories/store/platformCommission/PartnerSettlementCycleRepository.php index 9820b34..fd55e8a 100644 --- a/app/common/repositories/store/platformCommission/PartnerSettlementCycleRepository.php +++ b/app/common/repositories/store/platformCommission/PartnerSettlementCycleRepository.php @@ -17,7 +17,7 @@ class PartnerSettlementCycleRepository extends BaseRepository{ protected $dao; private $set; private $startTime,$endTime; - private $totalCommission; + private $totalCommission,$refundTotalCommission,$realityMoney; public function __construct(PartnerSettlementCycleDao $dao){ $this->dao = $dao; @@ -102,8 +102,9 @@ class PartnerSettlementCycleRepository extends BaseRepository{ throw new Exception("执行时间错误(上一个周期结束时间{$upCycleEndDate},下一个周期结束时间{$nextCycleEndDate})"); } // 判断:分红总金额是否大于0 - $this->totalCommission = (float)app()->make(RecordRepository::class)->getTotalCommission($this->startTime,$this->endTime); - if($this->totalCommission <= 0) throw new Exception('分红总金额为0'); + [$this->totalCommission,$this->refundTotalCommission,$this->realityMoney] = (float)app()->make(RecordRepository::class)->getTotalCommission($this->startTime,$this->endTime); + + if($this->realityMoney <= 0) throw new Exception('分红总金额为0'); } /** * Common: 合伙人结算 - 佣金计算并且记录 @@ -125,6 +126,8 @@ class PartnerSettlementCycleRepository extends BaseRepository{ // 记录周期分红信息 $cycleId = PartnerSettlementCycle::insertGetId([ 'total_commission' => $this->totalCommission, + 'refund_money' => $this->refundTotalCommission, + 'reality_money' => $this->realityMoney, 'total_weight_value' => $totalWeightValue, 'total_people' => count($userList), 'start_time' => $this->startTime, @@ -135,7 +138,7 @@ class PartnerSettlementCycleRepository extends BaseRepository{ foreach($userList as $userId => $weightValue){ // 添加贡献分享分红信息记录 这里必须进行100的偏移计算 $radio = (float)sprintf("%.2f",($weightValue / $totalWeightValue) * 100);// 佣金比例 - $money = (float)sprintf("%.2f",($this->totalCommission * $radio) / 100);// 实际获得佣金 + $money = (float)sprintf("%.2f",($this->realityMoney * $radio) / 100);// 实际获得佣金 if($money > 0){ $logInsertData[] = [ 'uid' => $userId, diff --git a/app/common/repositories/store/platformCommission/RecordRepository.php b/app/common/repositories/store/platformCommission/RecordRepository.php index b93c89f..981dea3 100644 --- a/app/common/repositories/store/platformCommission/RecordRepository.php +++ b/app/common/repositories/store/platformCommission/RecordRepository.php @@ -116,13 +116,28 @@ class RecordRepository extends BaseRepository{ * Time: 2023/12/28 14:22 * @param $startTime * @param $endTime - * @return float + * @return float[] + * @throws \think\db\exception\DataNotFoundException + * @throws \think\db\exception\DbException + * @throws \think\db\exception\ModelNotFoundException */ - public function getTotalCommission($startTime,$endTime):float{ - return (float)$this->dao->getSearch([]) + public function getTotalCommission($startTime,$endTime):array{ + // 获取总数量 + $totalMoney = (float)$this->dao->getSearch([]) ->whereBetweenTime('create_time', $startTime, $endTime) ->where('commission_partner_status',0) ->sum('commission_partner_money'); + // 获取退款金额 + $refundMoneyInfo = $this->dao->getSearch([]) + ->field('sum((commission_partner_money * refund_ratio / 100)) as refund_money') + ->whereBetweenTime('create_time', $startTime, $endTime) + ->where('commission_partner_status',0) + ->find(); + $refundMoney = sprintf("%.2f",$refundMoneyInfo->refund_money ?? 0); + // 实际金额 + $realityMoney = sprintf("%.2f",$totalMoney - $refundMoney); + + return [(float)$totalMoney,(float)$refundMoney,(float)$realityMoney]; } /** * Common: 修改指定时间内 合伙人佣金结算状态 @@ -144,14 +159,31 @@ class RecordRepository extends BaseRepository{ * Time: 2023/12/28 18:49 * @param int $startTime * @param int $endTime - * @return float + * @return array + * @throws \think\db\exception\DataNotFoundException + * @throws \think\db\exception\DbException + * @throws \think\db\exception\ModelNotFoundException */ - public function getTotalIntegralReleaseMoney($startTime = 0,$endTime = 0){ - return (float)$this->dao->getSearch([]) + public function getTotalIntegralReleaseMoney(int $startTime = 0,int $endTime = 0):array{ + // 获取总数量 + $totalIntegralReleaseMoney = (float)$this->dao->getSearch([]) ->when($startTime > 0 && $endTime > 0,function($query) use ($startTime,$endTime){ $query->whereBetweenTime('create_time', $startTime, $endTime); }) ->sum('commission_integral_release_money'); + // 获取退款金额 + $refundTotalIntegralReleaseMoney = $this->dao->getSearch([]) + ->field('sum((commission_integral_release_money * refund_ratio / 100)) as refund_money') + ->when($startTime > 0 && $endTime > 0,function($query) use ($startTime,$endTime){ + $query->whereBetweenTime('create_time', $startTime, $endTime); + }) + ->find(); + $refundMoney = sprintf("%.2f",$refundTotalIntegralReleaseMoney->refund_money ?? 0); + // 实际金额 + $realityMoney = sprintf("%.2f",$totalIntegralReleaseMoney - $refundMoney); + + + return [(float)$totalIntegralReleaseMoney,(float)$refundMoney,(float)$realityMoney]; }