|
@@ -24,6 +24,7 @@ use App\Enums\TechnicianLocationType;
|
|
|
use Illuminate\Support\Facades\Cache;
|
|
|
use Illuminate\Support\Facades\Redis;
|
|
|
use App\Enums\PaymentMethod;
|
|
|
+use App\Models\Coach;
|
|
|
|
|
|
class OrderService
|
|
|
{
|
|
@@ -78,12 +79,17 @@ class OrderService
|
|
|
|
|
|
/**
|
|
|
* 获取技师订单列表
|
|
|
+ *
|
|
|
+ * @param int $coachId 技师ID
|
|
|
+ * @param array $params 查询参数
|
|
|
+ * @return array
|
|
|
*/
|
|
|
public function getOrderList(int $coachId, array $params = [])
|
|
|
{
|
|
|
// 1. 构建基础查询
|
|
|
$query = Order::query()
|
|
|
->where('coach_id', $coachId)
|
|
|
+ ->whereNull('coach_deleted_at') // 不显示技师已删除的订单
|
|
|
->whereNotIn('state', [
|
|
|
OrderStatus::CREATED->value, // 排除未支付订单
|
|
|
OrderStatus::ASSIGNED->value, // 排除已分配状态订单
|
|
@@ -1185,4 +1191,60 @@ class OrderService
|
|
|
],
|
|
|
];
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 技师删除订单
|
|
|
+ *
|
|
|
+ * 业务逻辑:
|
|
|
+ * 1. 验证订单是否存在且分配给当前技师
|
|
|
+ * 2. 验证订单状态是否允许删除(已完成、已取消等)
|
|
|
+ * 3. 更新订单的coach_deleted_at字段
|
|
|
+ * 4. 记录删除操作
|
|
|
+ *
|
|
|
+ * @param int $coachId 技师ID
|
|
|
+ * @param int $orderId 订单ID
|
|
|
+ * @return array
|
|
|
+ * @throws \Exception
|
|
|
+ */
|
|
|
+ public function deleteOrder(int $coachId, int $orderId): array
|
|
|
+ {
|
|
|
+ return DB::transaction(function () use ($coachId, $orderId) {
|
|
|
+ // 验证订单是否存在且分配给当前技师
|
|
|
+ $order = Order::where('id', $orderId)
|
|
|
+ ->where('coach_id', $coachId)
|
|
|
+ ->whereNull('coach_deleted_at') // 确保订单未被技师删除
|
|
|
+ ->first();
|
|
|
+
|
|
|
+ abort_if(!$order, 404, '订单不存在');
|
|
|
+
|
|
|
+ // 验证订单状态是否允许删除
|
|
|
+ // 允许删除已完成、已取消、已退款等状态的订单
|
|
|
+ $allowedStates = [
|
|
|
+ OrderStatus::COMPLETED->value, // 已完成
|
|
|
+ OrderStatus::CANCELLED->value, // 已取消
|
|
|
+ OrderStatus::REFUNDED->value, // 已退款
|
|
|
+ OrderStatus::REJECTED->value, // 已拒单
|
|
|
+ ];
|
|
|
+
|
|
|
+ abort_if(!in_array($order->state, $allowedStates), 422, '当前订单状态不允许删除');
|
|
|
+
|
|
|
+ // 标记订单为技师已删除
|
|
|
+ $order->update([
|
|
|
+ 'coach_deleted_at' => now()
|
|
|
+ ]);
|
|
|
+
|
|
|
+ // 创建订单记录
|
|
|
+ OrderRecord::create([
|
|
|
+ 'order_id' => $order->id,
|
|
|
+ 'object_id' => $coachId,
|
|
|
+ 'object_type' => CoachUser::class,
|
|
|
+ 'state' => OrderRecordStatus::DELETED->value,
|
|
|
+ 'remark' => '技师删除订单'
|
|
|
+ ]);
|
|
|
+
|
|
|
+ return [
|
|
|
+ 'message' => '订单删除成功'
|
|
|
+ ];
|
|
|
+ });
|
|
|
+ }
|
|
|
}
|