|
|
@@ -243,6 +243,7 @@ class FinanceService extends BaseService
|
|
|
$bonusPerformance = isset($userInfo['bonus_performance']) ? floatval($userInfo['bonus_performance']) : 0;
|
|
|
DB::beginTransaction();
|
|
|
try {
|
|
|
+ $logs = [];
|
|
|
if ($bonusRate > 0 && $bonusRate < 100) {
|
|
|
$teamPerformance = TeamService::make()->getTeamPerformanceByType($userId, 2, true);
|
|
|
$teamPerformance = round($teamPerformance + $userPerformance, 2); // 用户团队业绩
|
|
|
@@ -292,6 +293,8 @@ class FinanceService extends BaseService
|
|
|
$this->error = "用户[{$userId}]质押订单[{$orderNo}]的团队分红结算失败";
|
|
|
return false;
|
|
|
}
|
|
|
+
|
|
|
+ $logs[$userId] = ['error'=>"质押用户[{$userId}]团队分红结算成功",'orderNo'=>$orderNo,'bonusUsdt'=>$bonusAwardUsdt,'bonusRate'=>$bonusRate,'log'=>$data];
|
|
|
}
|
|
|
|
|
|
}
|
|
|
@@ -299,7 +302,6 @@ class FinanceService extends BaseService
|
|
|
|
|
|
|
|
|
// TODO 上级分红结算
|
|
|
- $logs = [];
|
|
|
if($parentIds){
|
|
|
$lastUserId = $userId;
|
|
|
$lastUserInfo = [];
|
|
|
@@ -315,6 +317,7 @@ class FinanceService extends BaseService
|
|
|
foreach($parentIds as $pid){
|
|
|
$info = isset($parents[$pid])? $parents[$pid] : [];
|
|
|
if(empty($info)){
|
|
|
+ $lastUserId = $pid;
|
|
|
$logs[$pid] = ['error'=>"分红用户[{$userId}]上级用户[{$pid}]信息不存在",'orderNo'=>$orderNo,'info'=>$info];
|
|
|
continue;
|
|
|
}
|
|
|
@@ -323,12 +326,13 @@ class FinanceService extends BaseService
|
|
|
$lastUserInfo = $userInfo;
|
|
|
}else{
|
|
|
$lastUserInfo = isset($parents[$lastUserId])?$parents[$lastUserId] : [];
|
|
|
- $lastUserId = isset($lastUserInfo['id'])? $lastUserInfo['id'] : 0;
|
|
|
+// $lastUserId = isset($lastUserInfo['id'])? $lastUserInfo['id'] : 0;
|
|
|
}
|
|
|
|
|
|
// 当前节点线下级直推用户
|
|
|
if(empty($lastUserInfo)){
|
|
|
- $logs[$pid] = ['error'=>"质押用户[{$userId}]上级用户[{$pid}]直推线用户信息不存在",'orderNo'=>$orderNo,'lastUserId'=>$lastUserId,'bonusRateTotal'=>$bonusTotalRate,'info'=>$info];
|
|
|
+ $lastUserId = $pid;
|
|
|
+ $logs[$pid] = ['error'=>"质押用户[{$userId}]上级用户[{$pid}]直推线用户信息不存在",'orderNo'=>$orderNo,'lastUserId'=>$lastUserId,'parents'=>$parents,'bonusRateTotal'=>$bonusTotalRate,'info'=>$info];
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
@@ -338,6 +342,7 @@ class FinanceService extends BaseService
|
|
|
$parentBonusRate = isset($info['bonus_rate']) ? floatval($info['bonus_rate']) : 0;
|
|
|
$realBonusRate = max(0,round($parentBonusRate - $bonusTotalRate));
|
|
|
if($realBonusRate <=0 || $realBonusRate >= 100){
|
|
|
+ $lastUserId = $pid;
|
|
|
$logs[$pid] = ['error'=>"质押用户[{$userId}]上级用户[{$pid}]无实际分红比例",'orderNo'=>$orderNo,'bonusRateTotal'=>$bonusTotalRate,'info'=>$info];
|
|
|
continue;
|
|
|
}
|
|
|
@@ -394,7 +399,7 @@ class FinanceService extends BaseService
|
|
|
'coin_type' => 3,
|
|
|
'money' => $bonusAwardUsdt,
|
|
|
'before_money' => $parentProfit,
|
|
|
- 'create_time' => time(),
|
|
|
+ 'create_time' => time()+1,
|
|
|
'action_ip' => get_client_ip(),
|
|
|
'remark' => "团队分红",
|
|
|
'status' => 1,
|
|
|
@@ -407,9 +412,17 @@ class FinanceService extends BaseService
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
- $logs[$pid] = ['error'=>"质押用户[{$userId}]上级用户[{$pid}]团队分红结算成功",'orderNo'=>$orderNo,'bonusUsdt'=>$bonusAwardUsdt,'bonusRateTotal'=>$bonusTotalRate,'info'=>$info];
|
|
|
+ $lastUserId = $pid;
|
|
|
+ $logs[$pid] = ['error'=>"质押用户[{$userId}]上级用户[{$pid}]团队分红成功",'orderNo'=>$orderNo,'bonusUsdt'=>$bonusAwardUsdt,'bonusRateTotal'=>$bonusTotalRate,'info'=>$info];
|
|
|
+ $bonusTotalRate += $realBonusRate;
|
|
|
+ }else{
|
|
|
+ $lastUserId = $pid;
|
|
|
+ $logs[$pid] = ['error'=>"质押用户[{$userId}]上级用户[{$pid}]团队分红无结算金额",'orderNo'=>$orderNo,'bonusUsdt'=>0,'bonusRateTotal'=>$bonusTotalRate,'info'=>$info];
|
|
|
}
|
|
|
|
|
|
+ }else{
|
|
|
+ $lastUserId = $pid;
|
|
|
+ $logs[$pid] = ['error'=>"质押用户[{$userId}]上级用户[{$pid}]团队分红业绩不足",'orderNo'=>$orderNo,'teamPerformance'=>$teamPerformance,'bonusTeamPerformance'=>$bonusTeamPerformance,'bonusUsdt'=>0,'bonusRateTotal'=>$bonusTotalRate,'info'=>$info];
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -588,6 +601,7 @@ class FinanceService extends BaseService
|
|
|
}
|
|
|
|
|
|
$logs[$pid] = ['error'=>"质押用户[{$userId}]上级用户[{$pid}]工作室分红结算成功",'orderNo'=>$orderNo,'bonusUsdt'=>$bonusAwardUsdt,'bonusRateTotal'=>$bonusTotalRate,'info'=>$info];
|
|
|
+ $bonusTotalRate += $realBonusRate;
|
|
|
}
|
|
|
|
|
|
}
|
|
|
@@ -910,7 +924,7 @@ class FinanceService extends BaseService
|
|
|
}
|
|
|
|
|
|
$parentIds = get_parents($parentIds);
|
|
|
- $parentIds = array_slice($parentIds, 0, 10);
|
|
|
+// $parentIds = array_slice($parentIds, 0, 10);
|
|
|
if (empty($parentIds)) {
|
|
|
$this->error = lang(4511, ['uid' => $userId, 'order_no' => $orderNo]);
|
|
|
return true;
|
|
|
@@ -920,20 +934,33 @@ class FinanceService extends BaseService
|
|
|
try {
|
|
|
$count = 0;
|
|
|
$logs = [];
|
|
|
+ $floor = 0;
|
|
|
$shareRates = InstitutionalService::make()->getAwardByFloor();
|
|
|
DB::beginTransaction();
|
|
|
foreach ($parentIds as $key => $pid) {
|
|
|
- $floor = $key + 1;
|
|
|
- $rateInfo = isset($shareRates[$floor]) ? $shareRates[$floor] : [];
|
|
|
+ if($floor>7){
|
|
|
+ $logs[$pid] = ['error' => "该推荐人[{$pid}]超过结算层级,不结算", 'orderNo' => $orderNo, 'uid' => $userId, 'pledgeUsdt' => $pledgeUsdt, 'floor' => $floor, 'rate' => $rate];
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 验证用户是否有效
|
|
|
+ if (!PledgeOrderService::make()->checHasPledge($pid)) {
|
|
|
+ $logs[$pid] = ['error' => "该推荐人[{$pid}]是无效用户,不计算奖励不计算层级", 'orderNo' => $orderNo, 'uid' => $userId, 'pledgeUsdt' => $pledgeUsdt, 'floor' => $floor+1, 'rate' => $rate];
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ $rateInfo = isset($shareRates[$floor+1]) ? $shareRates[$floor+1] : [];
|
|
|
$rate = isset($rateInfo['value']) && $rateInfo['value'] > 0 && $rateInfo['value'] < 100 ? floatval($rateInfo['value']) : 0;
|
|
|
if (empty($rateInfo) || $rate <= 0) {
|
|
|
- $logs[$pid] = ['error' => "该层推荐人[{$pid}]推荐收益比例参数未配置", 'orderNo' => $orderNo, 'uid' => $userId, 'pledgeUsdt' => $pledgeUsdt, 'floor' => $floor];
|
|
|
+ $floor++;
|
|
|
+ $logs[$pid] = ['error' => "该层推荐人[{$pid}]推荐收益比例参数未配置,算层级不结算", 'orderNo' => $orderNo, 'uid' => $userId, 'pledgeUsdt' => $pledgeUsdt, 'floor' => $floor+1];
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
$shareAwardUsdt = moneyFormat($pledgeUsdt * $rate / 100, 2);
|
|
|
if ($shareAwardUsdt <= 0) {
|
|
|
- $logs[$pid] = ['error' => "该层推荐人[{$pid}]推荐无推荐收益", 'orderNo' => $orderNo, 'uid' => $userId, 'pledgeUsdt' => $pledgeUsdt, 'floor' => $floor, 'rate' => $rate];
|
|
|
+ $floor++;
|
|
|
+ $logs[$pid] = ['error' => "该层推荐人[{$pid}]推荐无推荐收益,算层级不结算", 'orderNo' => $orderNo, 'uid' => $userId, 'pledgeUsdt' => $pledgeUsdt, 'floor' => $floor+1, 'rate' => $rate];
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
@@ -943,13 +970,14 @@ class FinanceService extends BaseService
|
|
|
$userInfo = $userInfo ? $userInfo->toArray() : [];
|
|
|
$userProfit = isset($userInfo['profit']) ? $userInfo['profit'] : 0;
|
|
|
if (empty($userInfo) || $pid <= 0) {
|
|
|
- $logs[$pid] = ['error' => "该推荐人[{$pid}]信息不存在", 'orderNo' => $orderNo, 'uid' => $userId, 'pledgeUsdt' => $pledgeUsdt, 'floor' => $floor, 'rate' => $rate];
|
|
|
+ $logs[$pid] = ['error' => "该推荐人[{$pid}]信息不存在,不算层级", 'orderNo' => $orderNo, 'uid' => $userId, 'pledgeUsdt' => $pledgeUsdt, 'floor' => $floor+1, 'rate' => $rate];
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
// 验证是否结算过
|
|
|
if ($logId = AccountLogModel::where(['user_id' => $pid, 'order_no' => $orderNo, 'type' => 8, 'status' => 1, 'mark' => 1])->value('id')) {
|
|
|
- $logs[$pid] = ['error' => "该层推荐人[{$pid}]推荐奖励已结算过", 'logId' => $logId, 'orderNo' => $orderNo, 'uid' => $userId, 'pledgeUsdt' => $pledgeUsdt, 'floor' => $floor, 'rate' => $rate];
|
|
|
+ $floor++;
|
|
|
+ $logs[$pid] = ['error' => "该层推荐人[{$pid}]推荐奖励已结算过,算层级", 'logId' => $logId, 'orderNo' => $orderNo, 'uid' => $userId, 'pledgeUsdt' => $pledgeUsdt, 'floor' => $floor+1, 'rate' => $rate];
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
@@ -979,18 +1007,19 @@ class FinanceService extends BaseService
|
|
|
'before_money' => $userProfit,
|
|
|
'create_time' => time(),
|
|
|
'action_ip' => get_client_ip(),
|
|
|
- 'remark' => "{$floor}层推荐奖励",
|
|
|
+ 'remark' => ($floor+1)."层推荐奖励",
|
|
|
'status' => 1,
|
|
|
'mark' => 1,
|
|
|
];
|
|
|
|
|
|
if (!AccountLogModel::insertGetId($data)) {
|
|
|
DB::rollBack();
|
|
|
- $this->error = "用户[{$userId}]质押订单[{$orderNo}]的[{$floor}]层推荐人[{$pid}]推荐收益[{$shareAwardUsdt}]结算错误";
|
|
|
+ $this->error = "用户[{$userId}]质押订单[{$orderNo}]的[".($floor+1)."]层推荐人[{$pid}]推荐收益[{$shareAwardUsdt}]结算错误";
|
|
|
return false;
|
|
|
}
|
|
|
- $logs[$pid] = ['error' => "推荐人[{$pid}]奖励结算成功", 'orderNo' => $orderNo, 'uid' => $userId, 'profit' => $userProfit, 'awardUsdt' => $shareAwardUsdt, 'pledgeUsdt' => $pledgeUsdt, 'floor' => $floor, 'rate' => $rate];
|
|
|
+ $logs[$pid] = ['error' => "推荐人[{$pid}]奖励结算成功", 'orderNo' => $orderNo, 'uid' => $userId, 'profit' => $userProfit, 'awardUsdt' => $shareAwardUsdt, 'pledgeUsdt' => $pledgeUsdt, 'floor' => $floor+1, 'rate' => $rate];
|
|
|
$count++;
|
|
|
+ $floor++;
|
|
|
}
|
|
|
|
|
|
DB::commit();
|
|
|
@@ -1024,6 +1053,7 @@ class FinanceService extends BaseService
|
|
|
$info = $info? $info->toArray() : [];
|
|
|
$userId = isset($info['user_id'])? intval($info['user_id']) : 0;
|
|
|
$userProfit = isset($info['profit'])? floatval($info['profit']) : 0;
|
|
|
+ $profitRate = isset($info['maintenance_rate'])? floatval($info['maintenance_rate']) : 0;
|
|
|
if(empty($info) || $userId<=0){
|
|
|
$this->error = 2001;
|
|
|
return false;
|
|
|
@@ -1049,6 +1079,7 @@ class FinanceService extends BaseService
|
|
|
// 结算比例
|
|
|
$settleRate = ConfigService::make()->getConfigByCode('developer_settle_rate', 3);
|
|
|
$settleRate = $settleRate>0 && $settleRate <= 20? $settleRate : 3;
|
|
|
+ $settleRate = $profitRate>0 && $profitRate< 50? $profitRate : $settleRate;
|
|
|
|
|
|
$settleMoney = round($pledgeTotal * $settleRate/100, 2);
|
|
|
if($settleMoney>0){
|