feat(order): 禁止自己接自己发布的订单

- claimOrder 校验 buyer_id 与大神登录用户 id,相同直接 403「不能接自己发布的订单」

- 派单池支持 excludeBuyerId:已登录大神不会看到自己发布的待接单

- 115 套件/753 用例全绿;线上实测自接 403、他人可抢、自己的单不出现在自己的池子
这个提交包含在:
xcbyy
2026-10-22 10:35:56 +08:00
父节点 81368f870f
当前提交 082ec1c385
共有 4 个文件被更改,包括 26 次插入 和 6 次删除

查看文件

@@ -1490,9 +1490,11 @@ app.get('/api/orders/pool', async (req: Request, res: Response) => {
const lng = Number(req.query.lng);
const radius = Number(req.query.radius);
const hasFrom = Number.isFinite(lat) && Number.isFinite(lng) && Math.abs(lat) <= 90 && Math.abs(lng) <= 180 && !(lat === 0 && lng === 0);
// 已登录的大神不展示自己发布的订单(禁止自接自单)
const excludeBuyerId = resolveRequestUserId(req) || 0;
// 先取不带半径的全量池:为历史无坐标订单做地理编码兜底(每轮最多 5 条,结果回写入库)
let pre = await repo.getOrdersPool(hasFrom ? { fromLat: lat, fromLng: lng } : {});
let pre = await repo.getOrdersPool({ fromLat: hasFrom ? lat : null, fromLng: hasFrom ? lng : null, excludeBuyerId });
if (hasFrom) {
const missing = pre.filter((o: any) => !o.hasGeo && o.location).slice(0, 5);
let changed = false;
@@ -1503,7 +1505,7 @@ app.get('/api/orders/pool', async (req: Request, res: Response) => {
changed = true;
}
}
if (changed) pre = await repo.getOrdersPool({ fromLat: lat, fromLng: lng });
if (changed) pre = await repo.getOrdersPool({ fromLat: lat, fromLng: lng, excludeBuyerId });
}
const list = hasFrom && Number.isFinite(radius) && radius > 0