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

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

@ -151,30 +151,32 @@ class TransactionController
throw new \Exception('该用户昨日日切异常,无法审核');
}
$amount = (string)$transaction->amount;
$balance = (string)$memberInfo->balance;
// 3. 处理审核结果
if ($status === 3) {
// 审核通过
$amount = (string)$transaction->amount;
$balance = (string)$memberInfo->balance;
if (!is_numeric($amount) || !is_numeric($balance)) {
throw new \Exception('余额或交易金额格式错误');
}
if ($TransactionsType === 3) {
// 提现:余额减少
$new_balance = bcsub($balance, $amount, 2);
// 可选:检查余额是否足够
if (bccomp($new_balance, '0', 2) < 0) {
throw new \Exception('用户余额不足');
}
// 提现:余额不再减少,申请提现时已经减少
$new_balance =$balance;
// $new_balance = bcsub($balance, $amount, 2);
// // 可选:检查余额是否足够
// if (bccomp($new_balance, '0', 2) < 0) {
// throw new \Exception('用户余额不足');
// }
//累积提现金额
$withdraw_amount = (string)$memberInfo->withdraw_amount;
$new_withdraw_amount = bcadd($withdraw_amount, $amount, 2);
$up_member_date = [
'withdraw_amount' => $new_withdraw_amount,
'balance' => $new_balance,
// 'balance' => $new_balance,不再减少,申请提现时已经减少
];
} else {
// 充值/利息:余额增加
@ -205,6 +207,25 @@ class TransactionController
'verify_userid' => $userid,
'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;
use App\Http\Middleware\Log;
use App\Services\TencentSmsApiService;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
@ -215,19 +216,21 @@ class TransactionController
public function Withdraw(Request $request)
{
$systemStatus = \Yz::systemStatusCheck();
if(!$systemStatus['status']){
if (!$systemStatus['status']) {
return \Yz::echoError1($systemStatus['msg']);
}
$dayCutCheck = \Yz::DayCutCheck();
if(!$dayCutCheck['status']){
if (!$dayCutCheck['status']) {
return \Yz::echoError1($dayCutCheck['msg']);
}
$userid = $request->get('userid');//中间件产生的参数
$userid = $request->get('userid'); // 中间件产生的参数
$amount = request('amount');
if (empty($amount) || $amount < 0) {
return \Yz::echoError1('提现金额不能为0元');
if (empty($amount) || $amount <= 0) {
return \Yz::echoError1('提现金额不能为0元或负数');
}
$memberInfo = DB::table('members')->where(['id' => $userid, 'is_del' => 0])->first();
if (!$memberInfo) {
return \Yz::echoError1('用户不存在');
@ -235,23 +238,55 @@ class TransactionController
if ($memberInfo->balance < $amount) {
return \Yz::echoError1('余额不足');
}
$insertData = [
'member_id' => $userid,
'type' => 3,
'amount' => $amount,
'status' => 1,
'source' => 'member',
'operator_id' => $userid,
'created_at' => date('Y-m-d H:i:s'),
];
$id = DB::table('transactions')->insertGetId($insertData);
if (!!$id) {
$config=DB::table('configs')->where(['label'=>'管理员手机号'])->first();
$service = new TencentSmsApiService();
$ss= $service->send($config->value,$this->templateId, [$memberInfo->name,"转出"]);
return \Yz::Return(true, '充值成功!', ['id' => $id]);
} else {
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 = [
'member_id' => $userid,
'type' => 3,
'amount' => $amount,
'status' => 1,
'source' => 'member',
'operator_id' => $userid,
'created_at' => now(), // 使用 now() 更规范
];
$id = DB::table('transactions')->insertGetId($insertData);
if (!$id) {
throw new \Exception('创建交易记录失败');
}
// 3. 提交事务(关键!)
DB::commit();
// 4. 事务已提交,安全地发送短信(即使短信失败,也不影响资金操作)
try {
$config = DB::table('configs')->where(['label' => '管理员手机号'])->first();
if ($config) {
$service = new TencentSmsApiService();
$service->send($config->value, $this->templateId, [$memberInfo->name, "转出"]);
}
} catch (\Exception $smsException) {
// 短信失败可记录日志,但不中断流程
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
{
public function DBtest(){
echo DB::table('users')->count();
echo "66";
}
}

@ -99,16 +99,58 @@ class DayCutService
return ['status'=>true,'msg'=>$msg];
}
private static function processMemberDayCut($member, $Carbon_day, $daysToAdd, $cunkuan_rate, $day){
$transactions = DB::table("transactions")->where([ //查找未计算利息的交易
"member_id" => $member->id,
"is_del" => 0,
"status" => 3,
"is_interest_eligible" => 0
])->whereIn("type",[1,3])->orderBy("verify_time","asc")->get();
// 查询1已审核通过的交易status=3——包括充值(type=1)和提现(type=3)
$transactions1 = DB::table("transactions")
->where("member_id", $member->id)
->where("is_del", 0)
->where("status", 3)
->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;//用户表计息本金余额
foreach($transactions as $transaction){
Log::info("处理交易 - 用户ID: {$member->id}, 交易ID: {$transaction->id}, 审核时间: {$transaction->verify_time}, 类型: {$transaction->type}");
$shenHeDate_n = Carbon::parse($transaction->verify_time)->startOfDay()->addDays($daysToAdd);
if ($transaction->type == 3 && $transaction->status == 1) {
// 提现申请:用 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; //本笔流水金额
if($transaction->type == 1){//充值

Loading…
Cancel
Save