更改结算模式 ,改为算头不算尾

main
岩仔88 1 month ago
parent 28dcc9a4de
commit 583dfaf79c

@ -151,30 +151,32 @@ class TransactionController
throw new \Exception('该用户昨日日切异常,无法审核'); throw new \Exception('该用户昨日日切异常,无法审核');
} }
$amount = (string)$transaction->amount;
$balance = (string)$memberInfo->balance;
// 3. 处理审核结果 // 3. 处理审核结果
if ($status === 3) { if ($status === 3) {
// 审核通过 // 审核通过
$amount = (string)$transaction->amount;
$balance = (string)$memberInfo->balance;
if (!is_numeric($amount) || !is_numeric($balance)) { if (!is_numeric($amount) || !is_numeric($balance)) {
throw new \Exception('余额或交易金额格式错误'); throw new \Exception('余额或交易金额格式错误');
} }
if ($TransactionsType === 3) { if ($TransactionsType === 3) {
// 提现:余额减少 // 提现:余额不再减少,申请提现时已经减少
$new_balance = bcsub($balance, $amount, 2); $new_balance =$balance;
// 可选:检查余额是否足够 // $new_balance = bcsub($balance, $amount, 2);
if (bccomp($new_balance, '0', 2) < 0) { // // 可选:检查余额是否足够
throw new \Exception('用户余额不足'); // if (bccomp($new_balance, '0', 2) < 0) {
} // throw new \Exception('用户余额不足');
// }
//累积提现金额 //累积提现金额
$withdraw_amount = (string)$memberInfo->withdraw_amount; $withdraw_amount = (string)$memberInfo->withdraw_amount;
$new_withdraw_amount = bcadd($withdraw_amount, $amount, 2); $new_withdraw_amount = bcadd($withdraw_amount, $amount, 2);
$up_member_date = [ $up_member_date = [
'withdraw_amount' => $new_withdraw_amount, 'withdraw_amount' => $new_withdraw_amount,
'balance' => $new_balance, // 'balance' => $new_balance,不再减少,申请提现时已经减少
]; ];
} else { } else {
// 充值/利息:余额增加 // 充值/利息:余额增加
@ -205,6 +207,25 @@ class TransactionController
'verify_userid' => $userid, 'verify_userid' => $userid,
'note' => $Note, 'note' => $Note,
]; ];
if ($TransactionsType === 3) {//提现拒绝
$new_balance = bcadd($balance, $amount, 2);
$interest_total = (string)$memberInfo->interest_balance;
$new_interest_balance = bcadd($interest_total, $amount, 2);
$up_member_date = [
'balance' => $new_balance,
];
if($transaction->is_interest_eligible===1){//已经日切,恢复余额,恢复利息总额
$up_member_date = [
'balance' => $new_balance,
'interest_balance' => $new_interest_balance
];
}
DB::table('members')
->where('id', $transaction->member_id)
->update($up_member_date);
}
} }
// 更新交易状态 // 更新交易状态

@ -2,6 +2,7 @@
namespace App\Http\Controllers\API\H5; namespace App\Http\Controllers\API\H5;
use App\Http\Middleware\Log;
use App\Services\TencentSmsApiService; use App\Services\TencentSmsApiService;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
@ -222,12 +223,14 @@ class TransactionController
if (!$dayCutCheck['status']) { if (!$dayCutCheck['status']) {
return \Yz::echoError1($dayCutCheck['msg']); return \Yz::echoError1($dayCutCheck['msg']);
} }
$userid = $request->get('userid'); // 中间件产生的参数 $userid = $request->get('userid'); // 中间件产生的参数
$amount = request('amount'); $amount = request('amount');
if (empty($amount) || $amount < 0) { if (empty($amount) || $amount <= 0) {
return \Yz::echoError1('提现金额不能为0元'); return \Yz::echoError1('提现金额不能为0元或负数');
} }
$memberInfo = DB::table('members')->where(['id' => $userid, 'is_del' => 0])->first(); $memberInfo = DB::table('members')->where(['id' => $userid, 'is_del' => 0])->first();
if (!$memberInfo) { if (!$memberInfo) {
return \Yz::echoError1('用户不存在'); return \Yz::echoError1('用户不存在');
@ -235,6 +238,20 @@ class TransactionController
if ($memberInfo->balance < $amount) { if ($memberInfo->balance < $amount) {
return \Yz::echoError1('余额不足'); return \Yz::echoError1('余额不足');
} }
DB::beginTransaction();
try {
// 1. 扣减余额
$newBalance = bcsub($memberInfo->balance, $amount, 2);
$updated = DB::table('members')
->where(['id' => $userid])
->update(['balance' => $newBalance]);
if (!$updated) {
throw new \Exception('更新余额失败');
}
// 2. 插入交易记录
$insertData = [ $insertData = [
'member_id' => $userid, 'member_id' => $userid,
'type' => 3, 'type' => 3,
@ -242,16 +259,34 @@ class TransactionController
'status' => 1, 'status' => 1,
'source' => 'member', 'source' => 'member',
'operator_id' => $userid, 'operator_id' => $userid,
'created_at' => date('Y-m-d H:i:s'), 'created_at' => now(), // 使用 now() 更规范
]; ];
$id = DB::table('transactions')->insertGetId($insertData); $id = DB::table('transactions')->insertGetId($insertData);
if (!!$id) {
if (!$id) {
throw new \Exception('创建交易记录失败');
}
// 3. 提交事务(关键!)
DB::commit();
// 4. 事务已提交,安全地发送短信(即使短信失败,也不影响资金操作)
try {
$config = DB::table('configs')->where(['label' => '管理员手机号'])->first(); $config = DB::table('configs')->where(['label' => '管理员手机号'])->first();
if ($config) {
$service = new TencentSmsApiService(); $service = new TencentSmsApiService();
$ss= $service->send($config->value,$this->templateId, [$memberInfo->name,"转出"]); $service->send($config->value, $this->templateId, [$memberInfo->name, "转出"]);
return \Yz::Return(true, '充值成功!', ['id' => $id]); }
} else { } catch (\Exception $smsException) {
return \Yz::echoError1('提交失败'); // 短信失败可记录日志,但不中断流程
Log::warning('提现短信发送失败: ' . $smsException->getMessage());
}
return \Yz::Return(true, '提现成功!', ['id' => $id]);
} catch (\Exception $e) {
DB::rollBack();
return \Yz::echoError1($e->getMessage());
} }
} }

@ -8,6 +8,6 @@ use Illuminate\Support\Facades\DB;
class TestController extends Controller class TestController extends Controller
{ {
public function DBtest(){ public function DBtest(){
echo DB::table('users')->count(); echo "66";
} }
} }

@ -99,16 +99,58 @@ class DayCutService
return ['status'=>true,'msg'=>$msg]; return ['status'=>true,'msg'=>$msg];
} }
private static function processMemberDayCut($member, $Carbon_day, $daysToAdd, $cunkuan_rate, $day){ private static function processMemberDayCut($member, $Carbon_day, $daysToAdd, $cunkuan_rate, $day){
$transactions = DB::table("transactions")->where([ //查找未计算利息的交易 // 查询1已审核通过的交易status=3——包括充值(type=1)和提现(type=3)
"member_id" => $member->id, $transactions1 = DB::table("transactions")
"is_del" => 0, ->where("member_id", $member->id)
"status" => 3, ->where("is_del", 0)
"is_interest_eligible" => 0 ->where("status", 3)
])->whereIn("type",[1,3])->orderBy("verify_time","asc")->get(); ->where("is_interest_eligible", 0)
->whereIn("type", [1, 3])
->orderBy("verify_time", "asc") // 这里用 verify_time 排序没问题
->get();
// 查询2提现申请type=3, status=1——因系统在申请时已扣款并需立即止息
$transactions2 = DB::table("transactions")
->where("member_id", $member->id)
->where("is_del", 0)
->where("status", 1)
->where("type", 3)
->where("is_interest_eligible", 0)
->orderBy("created_at", "asc") // 👈 关键:这里按 created_at 排序!
->get();
// 合并后统一按“实际生效时间”排序(需自定义)
$transactions = $transactions1->merge($transactions2);
// 自定义排序status=1 用 created_at其他用 verify_time
$transactions = $transactions->sortBy(function ($tx) {
if ($tx->type == 3 && $tx->status == 1) {
return $tx->created_at;
}
return $tx->verify_time;
})->values();
$member_interest_balance = (string)$member->interest_balance;//用户表计息本金余额 $member_interest_balance = (string)$member->interest_balance;//用户表计息本金余额
foreach($transactions as $transaction){ foreach($transactions as $transaction){
Log::info("处理交易 - 用户ID: {$member->id}, 交易ID: {$transaction->id}, 审核时间: {$transaction->verify_time}, 类型: {$transaction->type}"); if ($transaction->type == 3 && $transaction->status == 1) {
$shenHeDate_n = Carbon::parse($transaction->verify_time)->startOfDay()->addDays($daysToAdd); // 提现申请:用 created_at 作为起息/止息基准
$baseTime = $transaction->created_at;
} else {
// 充值type=1, status=3或其他成功交易用 verify_time
$baseTime = $transaction->verify_time;
}
if (empty($baseTime)) {
Log::warning("交易缺少生效时间,跳过处理", [
'member_id' => $member->id,
'transaction_id' => $transaction->id,
'type' => $transaction->type,
'status' => $transaction->status,
]);
continue; // 跳过这条异常数据
}
Log::info("处理交易 - 用户ID: {$member->id}, 交易ID: {$transaction->id}, 生效时间: {$baseTime}, 类型: {$transaction->type}, 状态: {$transaction->status}");
$shenHeDate_n = Carbon::parse($baseTime)->startOfDay()->addDays($daysToAdd);
$trans_amount= (string)$transaction->amount; //本笔流水金额 $trans_amount= (string)$transaction->amount; //本笔流水金额
if($transaction->type == 1){//充值 if($transaction->type == 1){//充值

Loading…
Cancel
Save