优惠券

This commit is contained in:
dzl
2025-10-13 17:28:29 +08:00
parent 3abcd5e46a
commit b512c6479d
2 changed files with 134 additions and 52 deletions

View File

@@ -919,41 +919,112 @@ router.get('/:id/reviews', async (req, res) => {
// 获取推荐商品
router.get('/:id/recommended', async (req, res) => {
try {
// 获取商品id
const id = parseInt(req.params.id);
// 获取同类别的其他商品作为推荐
const query = `
SELECT p2.id, p2.name, p2.price, p2.points_price as points,
p2.stock, p2.image_url as image, p2.description
FROM products p1
WHERE p1.id = ? AND p2.id != ? AND p2.status = 'active'
ORDER BY RAND()
LIMIT 6
// 通过商品id获取该商品的分类id
const categoryQuery = `
SELECT category_id FROM products_category WHERE product_id = ?
`;
const [currentCategory] = await getDB().execute(categoryQuery, [id]);
const [recommendedProducts] = await getDB().execute(query, [id, id]);
let parentId = null;
let categoryIds = currentCategory.map(item => item.category_id);
// 如果同类别商品不足,补充其他热门商品
if (recommendedProducts.length < 6) {
const remainingCount = 6 - recommendedProducts.length;
if (remainingCount > 0) {
const additionalQuery = `
if(currentCategory.length > 0 && currentCategory[0] !== null) {
// 获取该商品的一级分类id
const item = currentCategory[0];
const levelQuery = `
SELECT * FROM category WHERE id = ? AND level = 1
`;
const [fatherCategory] = await getDB().execute(levelQuery, [item.category_id]);
if(fatherCategory.length > 0) {
// 该商品为一级分类商品,不存在二级分类
parentId = fatherCategory[0].id;
categoryIds.push(parentId);
} else {
// 获取该商品的二级分类id
const secondlevelQuery = `
SELECT * FROM category WHERE id = ? AND level = 2
`;
const [secondlevelCategory] = await getDB().execute(secondlevelQuery, [item.category_id]);
if(secondlevelCategory.length > 0) {
// 通过二级分类获取一级分类id
parentId = secondlevelCategory[0].parent_id;
categoryIds.push(parentId);
}
}
}
// categoryIds目前存储该商品的一级分类id及其目录下所有二级分类的id
const allSecondCategoryIdsQuery = `
SELECT id FROM category WHERE parent_id = ? AND level = 2
`;
const [secondCategoryIds] = await getDB().execute(allSecondCategoryIdsQuery, [parentId]);
categoryIds.push(...secondCategoryIds.map(item => item.id));
let recommendedProducts = [];
// 如果有分类ID先获取同类商品
if (categoryIds.length > 0) {
const recommendId = `
SELECT * FROM products_category WHERE category_id IN (${categoryIds.map(() => '?').join(',')})
`;
const [recommendProductIds] = await getDB().execute(recommendId, categoryIds);
console.log(1234, recommendProductIds);
const filteredRecommendProductIds = [...new Set(recommendProductIds.map(item => item.product_id))];
console.log(12345, filteredRecommendProductIds);
// 获取同类别的其他商品作为推荐
if (filteredRecommendProductIds.length > 0) {
const query = `
SELECT id, name, price, points_price as points,
stock, image_url as image, description
FROM products
WHERE id != ? AND status = 'active'
ORDER BY RAND()
LIMIT ${remainingCount}
WHERE id IN (${filteredRecommendProductIds.map(() => '?').join(',')}) AND id != ?
`;
const [additionalProducts] = await getDB().execute(
additionalQuery,
[id]
);
recommendedProducts.push(...additionalProducts);
const [categoryProducts] = await getDB().execute(query, [...filteredRecommendProductIds, id]);
recommendedProducts = categoryProducts;
}
}
// 如果同类别商品不足,补充其他热门商品
// if (recommendedProducts.length < 6) {
// const remainingCount = 6 - recommendedProducts.length;
// const additionalQuery = `
// SELECT id, name, price, points_price as points,
// stock, image_url as image, description
// FROM products
// WHERE id NOT IN (${filteredRecommendProductIds.map(() => '?').join(',')})
// ORDER BY RAND()
// LIMIT ?
// `;
// }
// 如果同类别商品不足,补充其他热门商品
// if (recommendedProducts.length < 6) {
// const remainingCount = 6 - recommendedProducts.length;
// console.log(11111,typeof remainingCount,remainingCount);
// if (remainingCount > 0) {
// const additionalQuery = `
// SELECT id, name, price, points_price as points,
// stock, image_url as image, description
// FROM products
// WHERE id != ?
// ORDER BY RAND()
// LIMIT ?
// `;
// const [additionalProducts] = await getDB().execute(
// additionalQuery,
// [id, remainingCount] // 现在有两个占位符id 和 limit
// );
// recommendedProducts.push(...additionalProducts);
// }
// }
res.json({
success: true,