一、ThinkPHP项目实现商品过期预警
1. 商品过期预警功能开发
需求描述:在商品管理系统中,需要对临近或已过保质期的商品进行预警提示。当前数据查询逻辑有误,需要进行修正与优化。
开发实现:
第一步:定位接口与编写查询逻辑
首先,需要确定负责过期预警数据获取的后端接口。经查,该接口为:
/api/admin/productDeadLineList
该功能的核心在于构造正确的SQL查询语句,以筛选出需要预警的商品。在ThinkPHP框架中,可以使用其数据库操作类进行原生查询。以下为优化后的查询代码示例:
use think\Db;
$sub_sql = "(SELECT a.id product_id, a.name product_name, a.type_list, a.category_id, a.tags, a.description, a.cover_images, a.createtime, a.updatetime,
CASE
WHEN a.expire_date_type = 1 THEN a.expiration_date
ELSE a.expiration_date * 30
END AS expiration_days,
c.stock,
c.production_date,
CURDATE() today_date
FROM fa_product a
LEFT JOIN fa_product_sku b ON a.id = b.product_id
LEFT JOIN fa_product_sku_pici c ON a.id = c.product_id
WHERE a.expiration_date > 0 AND c.stock > 0
ORDER BY c.production_date ASC) t";
$sql = "SELECT *,
DATE_ADD(production_date, INTERVAL expiration_days DAY) AS finish_date
FROM " . $sub_sql . "
WHERE DATE_ADD(production_date, INTERVAL expiration_days DAY) <= today_date
GROUP BY product_id";
$result = Db::query($sql);
关键修改点:
- 移除了原查询中
a.id=668的硬编码测试条件,使其适用于所有商品。
- 将过期判断条件由
< today_date 修改为 <= today_date,确保到期当天的商品也能被预警。
- 在子查询(
$sub_sql)的WHERE条件中统一了数据过滤逻辑(a.expiration_date > 0 AND c.stock > 0),使分组前的数据更加准确。

图:优化后的商品过期预警查询逻辑示意图
第二步:功能验证
修改完成后,在测试环境执行查询,成功返回了符合预期(库存大于0且已过保质期)的商品列表,数据库查询逻辑修正完毕。
二、WordPress站点内容管理
1. 视频上传与页面内容清理
需求描述:客户需要在WordPress站点中上传一批视频及聊天截图,同时要求移除页面中残留的特定价格信息。
问题排查与处理:
第一步:清理数据库中的残留价格信息
客户反馈页面上的“¥3800/$522”价格信息未被完全清除。首先,尝试通过直接操作Java后台或前端业务系统所使用的数据库来清理数据。
执行以下SQL语句,查找并替换post_content字段中的特定价格文本:
-- 查询包含价格信息的内容
SELECT * FROM dyw_posts WHERE post_content LIKE '%¥3800/$522%';
-- 更新数据,移除价格信息
UPDATE dyw_posts
SET post_content = REPLACE(post_content, '¥3800/$522', '')
WHERE post_content LIKE '%¥3800/$522%';
执行更新后,发现页面显示仍未改变。这通常由以下原因导致:
- 其他字段控制:价格信息可能并非仅存储在
post_content中,还可能存在于文章的元数据(postmeta表)、主题或页面构建器的专用字段里。
- 缓存:站点或服务器层面存在缓存,导致修改未能即时生效。
第二步:深入排查与验证
为了快速定位问题,最有效的方法是使用站点当前采用的页面构建器(本例中为Elementor)进行可视化检查。通过Elementor编辑器直接浏览页面模块,可以清晰地看到每个模块的静态文本和动态数据来源,从而精确定位残留价格信息所在的具体组件或字段。
在更新了所有相关字段并清除站点及服务器缓存后,页面显示恢复正常,价格信息被成功移除。