feat: 新增发票抬头、晒单、钱包日志等模型及后台管理功能
- 新增 invoice_title、showcase、wallet_log 模型及对应语言包 - 新增后台控制器、视图及搜索字段配置 - 修复服务类目删除保护逻辑 - 优化后台登录页面文案及样式 - 新增前端角色切换逻辑及页面拦截 - 新增 SVG 图标及样式变量 - 修复接口权限及下拉框默认值问题
这个提交包含在:
@@ -35,32 +35,39 @@ class OrderAutoverify extends Command
|
||||
$success = 0;
|
||||
foreach ($orders as $order) {
|
||||
$orderId = (int)$order['id'];
|
||||
$masterId = (int)$order['master_id'];
|
||||
$payAmount = (float)$order['pay_amount'];
|
||||
$rate = 10.00;
|
||||
$commission = round($payAmount * $rate / 100, 2);
|
||||
$settleAmount = round($payAmount - $commission, 2);
|
||||
$now = time();
|
||||
|
||||
Db::startTrans();
|
||||
try {
|
||||
$lockedOrder = Db::name('order')->where('id', $orderId)->lock(true)->find();
|
||||
if (!$lockedOrder || (int)$lockedOrder['status'] !== OrderStatus::PENDING_VERIFY || (int)$lockedOrder['settle_status'] === 1) {
|
||||
Db::rollback();
|
||||
continue;
|
||||
}
|
||||
|
||||
$masterId = (int)$lockedOrder['master_id'];
|
||||
$payAmount = (float)$lockedOrder['pay_amount'];
|
||||
$rate = 10.00;
|
||||
$commission = round($payAmount * $rate / 100, 2);
|
||||
$settleAmount = round($payAmount - $commission, 2);
|
||||
|
||||
// 1. 更新订单为已完成
|
||||
Db::name('order')->where('id', $orderId)->update([
|
||||
'status' => OrderStatus::COMPLETED,
|
||||
'verify_time' => time(),
|
||||
'verify_time' => $now,
|
||||
'settle_status' => 1,
|
||||
'settle_amount' => $settleAmount,
|
||||
'updatetime' => time(),
|
||||
'updatetime' => $now,
|
||||
]);
|
||||
|
||||
// 2. 插入订单日志
|
||||
// 2. 插入订单日志(严格对齐 fa_order_log 真实列名)
|
||||
Db::name('order_log')->insert([
|
||||
'order_id' => $orderId,
|
||||
'from_status'=> OrderStatus::PENDING_VERIFY,
|
||||
'to_status' => OrderStatus::COMPLETED,
|
||||
'remark' => '完工满48小时客户未确认,系统自动验收结算',
|
||||
'operator' => 'system',
|
||||
'op_id' => 0,
|
||||
'createtime' => time(),
|
||||
'order_id' => $orderId,
|
||||
'status' => OrderStatus::COMPLETED,
|
||||
'remark' => '完工满48小时客户未确认,系统自动验收结算',
|
||||
'operator_type' => 'system',
|
||||
'operator_id' => 0,
|
||||
'createtime' => $now,
|
||||
]);
|
||||
|
||||
// 3. 写入结算表
|
||||
@@ -72,46 +79,48 @@ class OrderAutoverify extends Command
|
||||
'commission' => $commission,
|
||||
'settle_amount' => $settleAmount,
|
||||
'status' => 'settled',
|
||||
'settle_time' => time(),
|
||||
'createtime' => time(),
|
||||
'settle_time' => $now,
|
||||
'createtime' => $now,
|
||||
]);
|
||||
|
||||
// 4. 师傅钱包入账(行级悲观锁)
|
||||
if ($masterId > 0) {
|
||||
$master = Db::name('master')->where('id', $masterId)->lock(true)->find();
|
||||
$newMoney = round((float)$master['money'] + $settleAmount, 2);
|
||||
Db::name('master')->where('id', $masterId)->update([
|
||||
'money' => $newMoney,
|
||||
'order_count' => (int)$master['order_count'] + 1,
|
||||
'updatetime' => time(),
|
||||
]);
|
||||
Db::name('wallet_log')->insert([
|
||||
'user_type' => 'master',
|
||||
'user_id' => $masterId,
|
||||
'type' => 'settle',
|
||||
'amount' => $settleAmount,
|
||||
'balance' => $newMoney,
|
||||
'order_id' => $orderId,
|
||||
'remark' => '订单超时自动核销结算入账',
|
||||
'createtime' => time(),
|
||||
]);
|
||||
if ($master) {
|
||||
$newMoney = round((float)$master['money'] + $settleAmount, 2);
|
||||
Db::name('master')->where('id', $masterId)->update([
|
||||
'money' => $newMoney,
|
||||
'order_count' => (int)$master['order_count'] + 1,
|
||||
'updatetime' => $now,
|
||||
]);
|
||||
Db::name('wallet_log')->insert([
|
||||
'user_type' => 'master',
|
||||
'user_id' => $masterId,
|
||||
'type' => 'settle',
|
||||
'amount' => $settleAmount,
|
||||
'balance' => $newMoney,
|
||||
'order_id' => $orderId,
|
||||
'remark' => '订单超时自动核销结算入账',
|
||||
'createtime' => $now,
|
||||
]);
|
||||
|
||||
// 通知师傅
|
||||
Db::name('message')->insert([
|
||||
'user_type' => 'master',
|
||||
'user_id' => (int)$master['user_id'],
|
||||
'title' => '订单自动核销结算入账',
|
||||
'content' => "订单 {$order['order_no']} 完工满48小时已自动验收,收入 ¥{$settleAmount}",
|
||||
'type' => 'order',
|
||||
'target_id' => $orderId,
|
||||
'is_read' => 0,
|
||||
'createtime' => time(),
|
||||
]);
|
||||
// 通知师傅(严格对齐 fa_message 真实列名,receive_id 传 fa_master.id)
|
||||
Db::name('message')->insert([
|
||||
'receive_type' => 'master',
|
||||
'receive_id' => (int)$master['id'],
|
||||
'type' => 'order',
|
||||
'title' => '订单自动核销结算入账',
|
||||
'content' => "订单 {$lockedOrder['order_no']} 完工满48小时已自动验收,收入 ¥{$settleAmount}",
|
||||
'order_id' => $orderId,
|
||||
'is_read' => 0,
|
||||
'createtime' => $now,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
Db::commit();
|
||||
$success++;
|
||||
$output->writeln(" [OK] 订单 #{$orderId} ({$order['order_no']}) 自动核销完成,结算 ¥{$settleAmount}");
|
||||
$output->writeln(" [OK] 订单 #{$orderId} ({$lockedOrder['order_no']}) 自动核销完成,结算 ¥{$settleAmount}");
|
||||
} catch (\Exception $e) {
|
||||
Db::rollback();
|
||||
$output->writeln(" [FAIL] 订单 #{$orderId} 自动核销异常: " . $e->getMessage());
|
||||
|
||||
在新工单中引用
屏蔽一个用户