添加了定时任务, 若是在定时任务中使用了事务则无法保存成功, 需要移除所有的事务;
仅有数据查询和更新, 没有队列和其他的事件分发; 若是存在事务, 则不会提交, 感觉像是被回滚了, 没有报错, 根据日志是成功的分钟;
移除执行链路所有的事务后则更新成功;
case 'auto_calc_proxy_radio': // 自动结算流水奖
return app()->make(ProxyService::class)->calcProxyUpgradeRatioReward();
/**
* 解冻金额
* @param $uid
* @param $amount
* @param $remark
* @param $kind_id 关联id
* @return void
* @throws \Exception
*/
public function unfreezeAmount($uid, $amount, $remark, $kind_id = null, $addBack = false)
{
try {
Db::startTrans();
Db::name('proxy_user')
->where('uid', $uid)
->inc('freeze_amount', -$amount)
->update();
if ($addBack) {
Db::name('proxy_user')
->where('uid', $uid)
->inc('amount', $amount)
->inc('total_amount', $amount)
->update();
Db::name('proxy_user_amount_log')->insert([
'uid' => $uid,
'amount' => $amount,
'remark' => $remark,
'status' => 1, // 已结算
'type' => 99,
'kind_id' => $kind_id,
'create_time' => time(),
'update_time' => time(),
]);
}
Db::commit();
} catch (\Exception $e) {
Db::rollback();
trace("记录用户余额变更失败 [提现余额解冻] \n" . $e->getTraceAsString(), 'error');
throw $e;
}
}
public function calcProxyUpgradeRatioReward()
{
// 当前0点时间戳
$time = strtotime(date('Y-m-d'));
$list = Db::name('proxy_upgrade_ratio_reward')->where('status', 0)->where('create_time', '<', $time)->select();
trace('自动计算流水奖, 找到:' . count($list), 'info');
$amounts = [];
foreach ($list as $item) {
if (!isset($amounts[$item['spread_uid']])) {
$amounts[$item['spread_uid']] = [
'ids' => [],
'amount' => "0",
];
}
$amounts[$item['spread_uid']]['ids'][] = $item['id'];
$amounts[$item['spread_uid']]['amount'] = bcadd($amounts[$item['spread_uid']]['amount'], $item['reward_amount'], 2);
}
foreach ($amounts as $uid => $amount) {
try {
Db::startTrans();
$id = $this->addAmount($uid, $amount['amount'], '每日流水奖结算', 1);
$res = Db::name('proxy_upgrade_ratio_reward')->whereIn('id', $amount['ids'])->update(['status' => 1, 'log_id' => $id]);
Db::commit();
trace('自动计算流水奖励成功:' . json_encode([$uid, $res]), 'info');
} catch (\Exception $e) {
Db::rollback();
trace('自动计算流水奖励失败:' . json_encode([$uid, $amount]) . '\n' . $e->getTraceAsString(), 'error');
}
}
return true;
}SQL 日志
[2026-02-04T15:51:27+08:00][sql] SHOW FULL COLUMNS FROM `eb_proxy_upgrade_ratio_reward` [ RunTime:0.000542s ]
[2026-02-04T15:51:27+08:00][sql] SELECT COUNT(*) AS think_count FROM `eb_proxy_upgrade_ratio_reward` `prr` LEFT JOIN `eb_user` `u` ON `u`.`uid`=`prr`.`uid` LEFT JOIN `eb_user` `su` ON `su`.`uid`=`prr`.`spread_uid` WHERE ( `prr`.`spread_uid` = '17' ) [ RunTime:0.000316s ]
[2026-02-04T15:51:33+08:00][sql] CONNECT:[ UseTime:0.000495s ] mysql:host=127.0.0.1;port=3306;dbname=cdtcrm.com;charset=utf8mb4
[2026-02-04T15:51:33+08:00][sql] SHOW FULL COLUMNS FROM `eb_proxy_upgrade_ratio_reward` [ RunTime:0.000614s ]
[2026-02-04T15:51:33+08:00][sql] SELECT * FROM `eb_proxy_upgrade_ratio_reward` WHERE `status` = 0 AND `create_time` < 1770134400 [ RunTime:0.000393s ]
[2026-02-04T15:51:33+08:00][sql] SHOW FULL COLUMNS FROM `eb_proxy_user` [ RunTime:0.000388s ]
[2026-02-04T15:51:33+08:00][sql] UPDATE `eb_proxy_user` SET `amount` = `amount` + 0.02 , `total_amount` = `total_amount` + 0.02 WHERE `uid` = 4 [ RunTime:0.000239s ]
[2026-02-04T15:51:33+08:00][sql] SHOW FULL COLUMNS FROM `eb_proxy_user_amount_log` [ RunTime:0.000352s ]
[2026-02-04T15:51:33+08:00][sql] INSERT INTO `eb_proxy_user_amount_log` SET `uid` = 4 , `amount` = '0.02' , `remark` = '每日流水奖结算' , `status` = 1 , `type` = 1 , `kind_id` = NULL , `create_time` = 1770191493 , `update_time` = 1770191493 [ RunTime:0.000225s ]
[2026-02-04T15:51:33+08:00][sql] UPDATE `eb_proxy_upgrade_ratio_reward` SET `status` = 1 , `log_id` = 1 WHERE `id` IN (3,4) [ RunTime:0.000202s ]
[2026-02-04T15:52:33+08:00][sql] SHOW FULL COLUMNS FROM `eb_proxy_upgrade_ratio_reward` [ RunTime:0.000438s ]
[2026-02-04T15:52:33+08:00][sql] SELECT * FROM `eb_proxy_upgrade_ratio_reward` WHERE `status` = 0 AND `create_time` < 1770134400 [ RunTime:0.000649s ]
[2026-02-04T15:52:33+08:00][sql] SHOW FULL COLUMNS FROM `eb_proxy_user` [ RunTime:0.000339s ]
[2026-02-04T15:52:33+08:00][sql] UPDATE `eb_proxy_user` SET `amount` = `amount` + 0.02 , `total_amount` = `total_amount` + 0.02 WHERE `uid` = 4 [ RunTime:0.000206s ]
[2026-02-04T15:52:33+08:00][sql] SHOW FULL COLUMNS FROM `eb_proxy_user_amount_log` [ RunTime:0.000331s ]
[2026-02-04T15:52:33+08:00][sql] INSERT INTO `eb_proxy_user_amount_log` SET `uid` = 4 , `amount` = '0.02' , `remark` = '每日流水奖结算' , `status` = 1 , `type` = 1 , `kind_id` = NULL , `create_time` = 1770191553 , `update_time` = 1770191553 [ RunTime:0.000200s ]
[2026-02-04T15:52:33+08:00][sql] UPDATE `eb_proxy_upgrade_ratio_reward` SET `status` = 1 , `log_id` = 1 WHERE `id` IN (3,4) [ RunTime:0.000217s ]
[2026-02-04T15:53:33+08:00][sql] SHOW FULL COLUMNS FROM `eb_proxy_upgrade_ratio_reward` [ RunTime:0.001061s ]
[2026-02-04T15:53:33+08:00][sql] SELECT * FROM `eb_proxy_upgrade_ratio_reward` WHERE `status` = 0 AND `create_time` < 1770134400 [ RunTime:0.000422s ]
[2026-02-04T15:53:33+08:00][sql] SHOW FULL COLUMNS FROM `eb_proxy_user` [ RunTime:0.000410s ]
[2026-02-04T15:53:33+08:00][sql] UPDATE `eb_proxy_user` SET `amount` = `amount` + 0.02 , `total_amount` = `total_amount` + 0.02 WHERE `uid` = 4 [ RunTime:0.000215s ]
[2026-02-04T15:53:33+08:00][sql] SHOW FULL COLUMNS FROM `eb_proxy_user_amount_log` [ RunTime:0.000358s ]
[2026-02-04T15:53:33+08:00][sql] INSERT INTO `eb_proxy_user_amount_log` SET `uid` = 4 , `amount` = '0.02' , `remark` = '每日流水奖结算' , `status` = 1 , `type` = 1 , `kind_id` = NULL , `create_time` = 1770191613 , `update_time` = 1770191613 [ RunTime:0.000290s ]
[2026-02-04T15:53:33+08:00][sql] UPDATE `eb_proxy_upgrade_ratio_reward` SET `status` = 1 , `log_id` = 1 WHERE `id` IN (3,4) [ RunTime:0.000267s ]
info 日志
[2026-02-04T15:51:33+08:00][info] 自动计算流水奖, 找到:2
[2026-02-04T15:51:33+08:00][info] 自动计算流水奖励成功:[4,2]
[2026-02-04T15:52:33+08:00][info] 自动计算流水奖, 找到:2
[2026-02-04T15:52:33+08:00][info] 自动计算流水奖励成功:[4,2]
[2026-02-04T15:53:33+08:00][info] 自动计算流水奖, 找到:2
[2026-02-04T15:53:33+08:00][info] 自动计算流水奖励成功:[4,2]【产品名称】:Pro 会员电商系统 / 多门店系统 / 多商户系统 (PHP) / 标准版 (Java) / 多商户外贸版 / 知识付费系统 / 多商户系统 (Java)
【产品版本】:CRMEB-PRO v3.3.0
【部署方式】:MacOS 本地开发
【部署环境】:本地环境
【php版本】:php80
【Mysql版本】:5.7
【使用终端】:后台

